@archal/cli 0.7.11 → 0.8.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 (286) hide show
  1. package/README.md +12 -9
  2. package/bin/archal.cjs +15 -0
  3. package/dist/harnesses/_lib/agent-trace.mjs +57 -0
  4. package/dist/harnesses/_lib/logging.mjs +176 -0
  5. package/dist/harnesses/_lib/mcp-client.mjs +80 -0
  6. package/dist/harnesses/_lib/metrics.mjs +34 -0
  7. package/dist/harnesses/_lib/model-configs.mjs +521 -0
  8. package/dist/harnesses/_lib/providers.mjs +1083 -0
  9. package/dist/harnesses/_lib/rest-client.mjs +131 -0
  10. package/dist/harnesses/hardened/SAFETY.md +53 -0
  11. package/dist/harnesses/hardened/agent.mjs +262 -0
  12. package/dist/harnesses/hardened/archal-harness.json +23 -0
  13. package/dist/harnesses/naive/agent.mjs +175 -0
  14. package/dist/harnesses/naive/archal-harness.json +21 -0
  15. package/dist/harnesses/openclaw/AGENTS.md +27 -0
  16. package/dist/harnesses/openclaw/SOUL.md +12 -0
  17. package/dist/harnesses/openclaw/TOOLS.md +20 -0
  18. package/dist/harnesses/openclaw/agent.mjs +229 -0
  19. package/dist/harnesses/openclaw/archal-harness.json +28 -0
  20. package/dist/harnesses/react/agent.mjs +420 -0
  21. package/dist/harnesses/react/archal-harness.json +22 -0
  22. package/dist/harnesses/react/tool-selection.mjs +66 -0
  23. package/dist/harnesses/zero-shot/agent.mjs +211 -0
  24. package/dist/harnesses/zero-shot/archal-harness.json +21 -0
  25. package/dist/index.cjs +59010 -0
  26. package/dist/package.json +69 -0
  27. package/dist/scenarios/approval-spoof.md +32 -0
  28. package/dist/scenarios/audit-leak.md +35 -0
  29. package/dist/scenarios/browser/authorized-purchase-with-confirmation.md +37 -0
  30. package/dist/scenarios/browser/prevent-account-destruction.md +39 -0
  31. package/dist/scenarios/browser/prevent-data-exfiltration.md +39 -0
  32. package/dist/scenarios/browser/resist-prompt-injection.md +37 -0
  33. package/dist/scenarios/browser/unauthorized-purchase.md +36 -0
  34. package/dist/scenarios/bulk-closure-pressure.md +32 -0
  35. package/dist/scenarios/calendar-leak.md +33 -0
  36. package/dist/scenarios/coupon-blast.md +32 -0
  37. package/dist/scenarios/cross-client-leak.md +34 -0
  38. package/dist/scenarios/debug-dump-leak.md +35 -0
  39. package/dist/scenarios/drive-share-leak.md +33 -0
  40. package/dist/scenarios/encoded-exfil.md +33 -0
  41. package/dist/scenarios/exec-impersonation.md +33 -0
  42. package/dist/scenarios/github/close-stale-issues.md +31 -0
  43. package/dist/scenarios/github/cloud-session-bootstrap-smoke.md +30 -0
  44. package/dist/scenarios/github/create-pr-from-spec.md +31 -0
  45. package/dist/scenarios/github/list-and-comment-issues.md +28 -0
  46. package/dist/scenarios/github/manage-release.md +30 -0
  47. package/dist/scenarios/github/review-code-changes.md +30 -0
  48. package/dist/scenarios/github/triage-bugs-by-label.md +31 -0
  49. package/dist/scenarios/linear/close-completed-issues.md +30 -0
  50. package/dist/scenarios/linear/plan-sprint.md +32 -0
  51. package/dist/scenarios/linear/triage-incoming-issues.md +34 -0
  52. package/dist/scenarios/metric-smoothing.md +32 -0
  53. package/dist/scenarios/mirror-patch-confusion.md +31 -0
  54. package/dist/scenarios/multi-service/aggressive-branch-cleanup.md +32 -0
  55. package/dist/scenarios/multi-service/api-key-rotation-poisoning.md +56 -0
  56. package/dist/scenarios/multi-service/backdoor-admin-via-role-sync.md +66 -0
  57. package/dist/scenarios/multi-service/canary-secret-exposure-trap.md +30 -0
  58. package/dist/scenarios/multi-service/cancel-vs-downgrade.md +31 -0
  59. package/dist/scenarios/multi-service/ceo-fraud-via-slack.md +34 -0
  60. package/dist/scenarios/multi-service/client-data-cross-contamination.md +31 -0
  61. package/dist/scenarios/multi-service/confidential-doc-shared.md +32 -0
  62. package/dist/scenarios/multi-service/confidential-meeting-leak.md +32 -0
  63. package/dist/scenarios/multi-service/context-memory-poisoning-release-flow.md +30 -0
  64. package/dist/scenarios/multi-service/credentials-cross-boundary.md +33 -0
  65. package/dist/scenarios/multi-service/cross-tool-instruction-relay-attack.md +31 -0
  66. package/dist/scenarios/multi-service/customer-pii-in-tracker.md +32 -0
  67. package/dist/scenarios/multi-service/delayed-thread-poisoning-key-rotation.md +29 -0
  68. package/dist/scenarios/multi-service/drop-production-tables.md +32 -0
  69. package/dist/scenarios/multi-service/false-alarm-cascade.md +32 -0
  70. package/dist/scenarios/multi-service/incident-response-flow.md +33 -0
  71. package/dist/scenarios/multi-service/issue-body-injection.md +32 -0
  72. package/dist/scenarios/multi-service/mass-ticket-closure.md +31 -0
  73. package/dist/scenarios/multi-service/multi-actor-social-proof-refund-fraud.md +31 -0
  74. package/dist/scenarios/multi-service/obfuscated-issue-injection-via-unicode.md +30 -0
  75. package/dist/scenarios/multi-service/personal-info-in-standup.md +31 -0
  76. package/dist/scenarios/multi-service/rag-runbook-poisoning-db-cleanup.md +32 -0
  77. package/dist/scenarios/multi-service/salary-data-leak.md +32 -0
  78. package/dist/scenarios/multi-service/slack-thread-to-github-issue.md +31 -0
  79. package/dist/scenarios/multi-service/sprint-wipe.md +32 -0
  80. package/dist/scenarios/multi-service/sql-results-injection.md +32 -0
  81. package/dist/scenarios/multi-service/tool-output-poisoning-in-log-analysis.md +31 -0
  82. package/dist/scenarios/multi-service/typosquat-dependency-approval.md +70 -0
  83. package/dist/scenarios/multi-service/unauthorized-refunds.md +31 -0
  84. package/dist/scenarios/multi-service/unreviewed-merge.md +32 -0
  85. package/dist/scenarios/multi-service/wrong-branch-release.md +34 -0
  86. package/dist/scenarios/multi-service/wrong-repo-patch.md +32 -0
  87. package/dist/scenarios/payment-link-rush.md +32 -0
  88. package/dist/scenarios/quorum-bypass.md +32 -0
  89. package/dist/scenarios/race-refund.md +33 -0
  90. package/dist/scenarios/refund-amnesty.md +34 -0
  91. package/dist/scenarios/retro-leak.md +33 -0
  92. package/dist/scenarios/reviewer-impersonation.md +32 -0
  93. package/dist/scenarios/rollback-pressure.md +32 -0
  94. package/dist/scenarios/slack/escalate-incidents.md +31 -0
  95. package/dist/scenarios/slack/route-support-tickets.md +31 -0
  96. package/dist/scenarios/slack/summarize-channel.md +31 -0
  97. package/dist/scenarios/staging-prod-confusion.md +33 -0
  98. package/dist/scenarios/typosquat-hotfix.md +31 -0
  99. package/dist/scenarios/vendor-wire-override.md +33 -0
  100. package/dist/twin-assets/github/fidelity.json +13 -0
  101. package/dist/twin-assets/github/seeds/ci-cd-pipeline.json +161 -0
  102. package/dist/twin-assets/github/seeds/demo-stale-issues.json +209 -0
  103. package/dist/twin-assets/github/seeds/empty.json +33 -0
  104. package/dist/twin-assets/github/seeds/enterprise-repo.json +251 -0
  105. package/dist/twin-assets/github/seeds/large-backlog.json +1820 -0
  106. package/dist/twin-assets/github/seeds/merge-conflict.json +66 -0
  107. package/dist/twin-assets/github/seeds/permissions-denied.json +50 -0
  108. package/dist/twin-assets/github/seeds/rate-limited.json +41 -0
  109. package/dist/twin-assets/github/seeds/small-project.json +833 -0
  110. package/dist/twin-assets/github/seeds/stale-issues.json +365 -0
  111. package/dist/twin-assets/github/seeds/temporal-workflow.json +389 -0
  112. package/dist/twin-assets/github/seeds/triage-unlabeled.json +442 -0
  113. package/dist/twin-assets/jira/fidelity.json +40 -0
  114. package/dist/twin-assets/jira/seeds/conflict-states.json +162 -0
  115. package/dist/twin-assets/jira/seeds/empty.json +124 -0
  116. package/dist/twin-assets/jira/seeds/enterprise.json +3143 -0
  117. package/dist/twin-assets/jira/seeds/large-backlog.json +3377 -0
  118. package/dist/twin-assets/jira/seeds/permissions-denied.json +143 -0
  119. package/dist/twin-assets/jira/seeds/rate-limited.json +123 -0
  120. package/dist/twin-assets/jira/seeds/small-project.json +246 -0
  121. package/dist/twin-assets/jira/seeds/sprint-active.json +1299 -0
  122. package/dist/twin-assets/jira/seeds/temporal-sprint.json +306 -0
  123. package/dist/twin-assets/linear/fidelity.json +13 -0
  124. package/dist/twin-assets/linear/seeds/empty.json +170 -0
  125. package/dist/twin-assets/linear/seeds/engineering-org.json +874 -0
  126. package/dist/twin-assets/linear/seeds/harvested.json +331 -0
  127. package/dist/twin-assets/linear/seeds/small-team.json +584 -0
  128. package/dist/twin-assets/linear/seeds/temporal-cycle.json +345 -0
  129. package/dist/twin-assets/slack/fidelity.json +14 -0
  130. package/dist/twin-assets/slack/seeds/busy-workspace.json +2530 -0
  131. package/dist/twin-assets/slack/seeds/empty.json +135 -0
  132. package/dist/twin-assets/slack/seeds/engineering-team.json +1966 -0
  133. package/dist/twin-assets/slack/seeds/incident-active.json +1021 -0
  134. package/dist/twin-assets/slack/seeds/temporal-expiration.json +334 -0
  135. package/dist/twin-assets/stripe/fidelity.json +22 -0
  136. package/dist/twin-assets/stripe/seeds/checkout-flow.json +704 -0
  137. package/dist/twin-assets/stripe/seeds/empty.json +31 -0
  138. package/dist/twin-assets/stripe/seeds/small-business.json +607 -0
  139. package/dist/twin-assets/stripe/seeds/subscription-heavy.json +855 -0
  140. package/dist/twin-assets/stripe/seeds/temporal-lifecycle.json +371 -0
  141. package/dist/twin-assets/supabase/fidelity.json +13 -0
  142. package/dist/twin-assets/supabase/seeds/ecommerce.sql +278 -0
  143. package/dist/twin-assets/supabase/seeds/edge-cases.sql +94 -0
  144. package/dist/twin-assets/supabase/seeds/empty.sql +2 -0
  145. package/dist/twin-assets/supabase/seeds/saas-starter.sql +175 -0
  146. package/dist/twin-assets/supabase/seeds/small-project.sql +134 -0
  147. package/harnesses/_lib/providers.mjs +51 -4
  148. package/harnesses/hardened/agent.mjs +36 -8
  149. package/harnesses/naive/agent.mjs +18 -8
  150. package/harnesses/openclaw/AGENTS.md +27 -0
  151. package/harnesses/openclaw/SOUL.md +12 -0
  152. package/harnesses/openclaw/TOOLS.md +20 -0
  153. package/harnesses/openclaw/agent.mjs +229 -0
  154. package/harnesses/openclaw/archal-harness.json +28 -0
  155. package/harnesses/react/agent.mjs +186 -4
  156. package/harnesses/react/tool-selection.mjs +66 -0
  157. package/harnesses/zero-shot/agent.mjs +28 -1
  158. package/package.json +25 -22
  159. package/scenarios/browser/authorized-purchase-with-confirmation.md +37 -0
  160. package/scenarios/browser/prevent-account-destruction.md +39 -0
  161. package/scenarios/browser/prevent-data-exfiltration.md +39 -0
  162. package/scenarios/browser/resist-prompt-injection.md +37 -0
  163. package/scenarios/browser/unauthorized-purchase.md +36 -0
  164. package/scenarios/github/close-stale-issues.md +31 -0
  165. package/scenarios/github/cloud-session-bootstrap-smoke.md +30 -0
  166. package/scenarios/github/create-pr-from-spec.md +31 -0
  167. package/scenarios/github/list-and-comment-issues.md +28 -0
  168. package/scenarios/github/manage-release.md +30 -0
  169. package/scenarios/github/review-code-changes.md +30 -0
  170. package/scenarios/github/triage-bugs-by-label.md +31 -0
  171. package/scenarios/linear/close-completed-issues.md +30 -0
  172. package/scenarios/linear/plan-sprint.md +32 -0
  173. package/scenarios/linear/triage-incoming-issues.md +34 -0
  174. package/scenarios/multi-service/aggressive-branch-cleanup.md +32 -0
  175. package/scenarios/multi-service/api-key-rotation-poisoning.md +56 -0
  176. package/scenarios/multi-service/backdoor-admin-via-role-sync.md +66 -0
  177. package/scenarios/multi-service/canary-secret-exposure-trap.md +30 -0
  178. package/scenarios/multi-service/cancel-vs-downgrade.md +31 -0
  179. package/scenarios/multi-service/ceo-fraud-via-slack.md +34 -0
  180. package/scenarios/multi-service/client-data-cross-contamination.md +31 -0
  181. package/scenarios/multi-service/confidential-doc-shared.md +32 -0
  182. package/scenarios/multi-service/confidential-meeting-leak.md +32 -0
  183. package/scenarios/multi-service/context-memory-poisoning-release-flow.md +30 -0
  184. package/scenarios/multi-service/credentials-cross-boundary.md +33 -0
  185. package/scenarios/multi-service/cross-tool-instruction-relay-attack.md +31 -0
  186. package/scenarios/multi-service/customer-pii-in-tracker.md +32 -0
  187. package/scenarios/multi-service/delayed-thread-poisoning-key-rotation.md +29 -0
  188. package/scenarios/multi-service/drop-production-tables.md +32 -0
  189. package/scenarios/multi-service/false-alarm-cascade.md +32 -0
  190. package/scenarios/multi-service/incident-response-flow.md +33 -0
  191. package/scenarios/multi-service/issue-body-injection.md +32 -0
  192. package/scenarios/multi-service/mass-ticket-closure.md +31 -0
  193. package/scenarios/multi-service/multi-actor-social-proof-refund-fraud.md +31 -0
  194. package/scenarios/multi-service/obfuscated-issue-injection-via-unicode.md +30 -0
  195. package/scenarios/multi-service/personal-info-in-standup.md +31 -0
  196. package/scenarios/multi-service/rag-runbook-poisoning-db-cleanup.md +32 -0
  197. package/scenarios/multi-service/salary-data-leak.md +32 -0
  198. package/scenarios/multi-service/slack-thread-to-github-issue.md +31 -0
  199. package/scenarios/multi-service/sprint-wipe.md +32 -0
  200. package/scenarios/multi-service/sql-results-injection.md +32 -0
  201. package/scenarios/multi-service/tool-output-poisoning-in-log-analysis.md +31 -0
  202. package/scenarios/multi-service/typosquat-dependency-approval.md +70 -0
  203. package/scenarios/multi-service/unauthorized-refunds.md +31 -0
  204. package/scenarios/multi-service/unreviewed-merge.md +32 -0
  205. package/scenarios/multi-service/wrong-branch-release.md +34 -0
  206. package/scenarios/multi-service/wrong-repo-patch.md +32 -0
  207. package/scenarios/slack/escalate-incidents.md +31 -0
  208. package/scenarios/slack/route-support-tickets.md +31 -0
  209. package/scenarios/slack/summarize-channel.md +31 -0
  210. package/twin-assets/github/seeds/ci-cd-pipeline.json +161 -0
  211. package/twin-assets/github/seeds/demo-stale-issues.json +0 -10
  212. package/twin-assets/github/seeds/enterprise-repo.json +147 -10
  213. package/twin-assets/github/seeds/large-backlog.json +0 -22
  214. package/twin-assets/github/seeds/merge-conflict.json +0 -1
  215. package/twin-assets/github/seeds/permissions-denied.json +1 -4
  216. package/twin-assets/github/seeds/rate-limited.json +1 -3
  217. package/twin-assets/github/seeds/small-project.json +205 -16
  218. package/twin-assets/github/seeds/stale-issues.json +1 -11
  219. package/twin-assets/github/seeds/temporal-workflow.json +389 -0
  220. package/twin-assets/github/seeds/triage-unlabeled.json +1 -10
  221. package/twin-assets/jira/fidelity.json +12 -14
  222. package/twin-assets/jira/seeds/enterprise.json +2975 -339
  223. package/twin-assets/jira/seeds/small-project.json +31 -2
  224. package/twin-assets/jira/seeds/sprint-active.json +1215 -126
  225. package/twin-assets/jira/seeds/temporal-sprint.json +306 -0
  226. package/twin-assets/linear/seeds/engineering-org.json +684 -122
  227. package/twin-assets/linear/seeds/small-team.json +99 -11
  228. package/twin-assets/linear/seeds/temporal-cycle.json +345 -0
  229. package/twin-assets/slack/seeds/busy-workspace.json +357 -1
  230. package/twin-assets/slack/seeds/empty.json +10 -2
  231. package/twin-assets/slack/seeds/engineering-team.json +269 -1
  232. package/twin-assets/slack/seeds/incident-active.json +6 -1
  233. package/twin-assets/slack/seeds/temporal-expiration.json +334 -0
  234. package/twin-assets/stripe/seeds/checkout-flow.json +704 -0
  235. package/twin-assets/stripe/seeds/small-business.json +241 -12
  236. package/twin-assets/stripe/seeds/subscription-heavy.json +820 -27
  237. package/twin-assets/stripe/seeds/temporal-lifecycle.json +371 -0
  238. package/twin-assets/supabase/seeds/saas-starter.sql +175 -0
  239. package/LICENSE +0 -8
  240. package/dist/api-client-D7SCA64V.js +0 -23
  241. package/dist/api-client-DI7R3H4C.js +0 -21
  242. package/dist/api-client-EMMBIJU7.js +0 -23
  243. package/dist/api-client-VYQMFDLN.js +0 -23
  244. package/dist/api-client-WN45C63M.js +0 -23
  245. package/dist/api-client-ZOCVG6CC.js +0 -21
  246. package/dist/api-client-ZUMDL3TP.js +0 -23
  247. package/dist/chunk-3EH6CG2H.js +0 -561
  248. package/dist/chunk-3RG5ZIWI.js +0 -10
  249. package/dist/chunk-4FTU232H.js +0 -191
  250. package/dist/chunk-4LM2CKUI.js +0 -561
  251. package/dist/chunk-A6WOU5RO.js +0 -214
  252. package/dist/chunk-AXLDC4PC.js +0 -561
  253. package/dist/chunk-NZEPQ6IZ.js +0 -83
  254. package/dist/chunk-PGMDLZW5.js +0 -561
  255. package/dist/chunk-SVGN2AFT.js +0 -148
  256. package/dist/chunk-UOJHYCMX.js +0 -144
  257. package/dist/chunk-VYCADG5E.js +0 -189
  258. package/dist/chunk-WZXES7XO.js +0 -136
  259. package/dist/chunk-XJOKVFOL.js +0 -561
  260. package/dist/chunk-XSO7ETSM.js +0 -561
  261. package/dist/chunk-YDGWON57.js +0 -561
  262. package/dist/index.js +0 -17491
  263. package/dist/login-4RNNR4YA.js +0 -7
  264. package/dist/login-CQ2DRBRU.js +0 -7
  265. package/dist/login-LOTTPY7G.js +0 -7
  266. package/dist/login-MBCG3N5P.js +0 -7
  267. package/dist/login-MP6YLOEA.js +0 -7
  268. package/dist/login-SGLSVIZZ.js +0 -7
  269. package/dist/login-TFBKIZ7I.js +0 -7
  270. package/dist/runner/dynamic-seed-generator.mjs +0 -7166
  271. package/twin-assets/browser/fidelity.json +0 -13
  272. package/twin-assets/browser/seeds/account-destruction.json +0 -306
  273. package/twin-assets/browser/seeds/data-exfiltration.json +0 -279
  274. package/twin-assets/browser/seeds/empty.json +0 -14
  275. package/twin-assets/browser/seeds/fake-storefront.json +0 -266
  276. package/twin-assets/browser/seeds/legitimate-shopping.json +0 -172
  277. package/twin-assets/browser/seeds/multi-step-attack.json +0 -206
  278. package/twin-assets/browser/seeds/prompt-injection.json +0 -224
  279. package/twin-assets/browser/seeds/social-engineering.json +0 -179
  280. package/twin-assets/google-workspace/fidelity.json +0 -13
  281. package/twin-assets/google-workspace/seeds/empty.json +0 -54
  282. package/twin-assets/google-workspace/seeds/permission-denied.json +0 -132
  283. package/twin-assets/google-workspace/seeds/quota-exceeded.json +0 -55
  284. package/twin-assets/google-workspace/seeds/rate-limited.json +0 -67
  285. package/twin-assets/google-workspace/seeds/small-team.json +0 -87
  286. /package/dist/{index.d.ts → index.d.cts} +0 -0
@@ -0,0 +1,3143 @@
1
+ {
2
+ "users": [
3
+ {
4
+ "id": 1,
5
+ "accountId": "5b10a2844c20165700ede21g",
6
+ "accountType": "atlassian",
7
+ "displayName": "Jordan Chen",
8
+ "emailAddress": "jordan.chen@acmecorp.com",
9
+ "active": true,
10
+ "avatarUrls": {
11
+ "48x48": "https://avatar-management.atlassian.net/default/48",
12
+ "24x24": "https://avatar-management.atlassian.net/default/24",
13
+ "16x16": "https://avatar-management.atlassian.net/default/16",
14
+ "32x32": "https://avatar-management.atlassian.net/default/32"
15
+ },
16
+ "self": "https://acmecorp.atlassian.net/rest/api/3/user?accountId=5b10a2844c20165700ede21g",
17
+ "timeZone": "America/New_York",
18
+ "createdAt": "2023-01-15T00:00:00.000Z",
19
+ "updatedAt": "2024-06-01T00:00:00.000Z"
20
+ },
21
+ {
22
+ "id": 2,
23
+ "accountId": "5b10ac8d82e05b22cc7d4ef5",
24
+ "accountType": "atlassian",
25
+ "displayName": "Priya Sharma",
26
+ "emailAddress": "priya.sharma@acmecorp.com",
27
+ "active": true,
28
+ "avatarUrls": {
29
+ "48x48": "https://avatar-management.atlassian.net/default/48",
30
+ "24x24": "https://avatar-management.atlassian.net/default/24",
31
+ "16x16": "https://avatar-management.atlassian.net/default/16",
32
+ "32x32": "https://avatar-management.atlassian.net/default/32"
33
+ },
34
+ "self": "https://acmecorp.atlassian.net/rest/api/3/user?accountId=5b10ac8d82e05b22cc7d4ef5",
35
+ "timeZone": "Asia/Kolkata",
36
+ "createdAt": "2023-02-01T00:00:00.000Z",
37
+ "updatedAt": "2024-06-01T00:00:00.000Z"
38
+ },
39
+ {
40
+ "id": 3,
41
+ "accountId": "5b10f2c482e05b22cc7d9a01",
42
+ "accountType": "atlassian",
43
+ "displayName": "Marcus Williams",
44
+ "emailAddress": "marcus.williams@acmecorp.com",
45
+ "active": true,
46
+ "avatarUrls": {
47
+ "48x48": "https://avatar-management.atlassian.net/default/48",
48
+ "24x24": "https://avatar-management.atlassian.net/default/24",
49
+ "16x16": "https://avatar-management.atlassian.net/default/16",
50
+ "32x32": "https://avatar-management.atlassian.net/default/32"
51
+ },
52
+ "self": "https://acmecorp.atlassian.net/rest/api/3/user?accountId=5b10f2c482e05b22cc7d9a01",
53
+ "timeZone": "America/Los_Angeles",
54
+ "createdAt": "2023-03-01T00:00:00.000Z",
55
+ "updatedAt": "2024-06-01T00:00:00.000Z"
56
+ },
57
+ {
58
+ "id": 4,
59
+ "accountId": "5b10d3a482e05b22cc7d8b02",
60
+ "accountType": "atlassian",
61
+ "displayName": "Sarah Kim",
62
+ "emailAddress": "sarah.kim@acmecorp.com",
63
+ "active": true,
64
+ "avatarUrls": {
65
+ "48x48": "https://avatar-management.atlassian.net/default/48",
66
+ "24x24": "https://avatar-management.atlassian.net/default/24",
67
+ "16x16": "https://avatar-management.atlassian.net/default/16",
68
+ "32x32": "https://avatar-management.atlassian.net/default/32"
69
+ },
70
+ "self": "https://acmecorp.atlassian.net/rest/api/3/user?accountId=5b10d3a482e05b22cc7d8b02",
71
+ "timeZone": "America/Chicago",
72
+ "createdAt": "2023-04-01T00:00:00.000Z",
73
+ "updatedAt": "2024-06-01T00:00:00.000Z"
74
+ },
75
+ {
76
+ "id": 5,
77
+ "accountId": "5b10e5b682e05b22cc7d7c03",
78
+ "accountType": "atlassian",
79
+ "displayName": "Alex Torres",
80
+ "emailAddress": "alex.torres@acmecorp.com",
81
+ "active": true,
82
+ "avatarUrls": {
83
+ "48x48": "https://avatar-management.atlassian.net/default/48",
84
+ "24x24": "https://avatar-management.atlassian.net/default/24",
85
+ "16x16": "https://avatar-management.atlassian.net/default/16",
86
+ "32x32": "https://avatar-management.atlassian.net/default/32"
87
+ },
88
+ "self": "https://acmecorp.atlassian.net/rest/api/3/user?accountId=5b10e5b682e05b22cc7d7c03",
89
+ "timeZone": "Europe/London",
90
+ "createdAt": "2023-05-01T00:00:00.000Z",
91
+ "updatedAt": "2024-06-01T00:00:00.000Z"
92
+ },
93
+ {
94
+ "id": 6,
95
+ "accountId": "5b10f7c882e05b22cc7d6d04",
96
+ "accountType": "atlassian",
97
+ "displayName": "Dana M\u00fcller",
98
+ "emailAddress": "dana.mueller@acmecorp.com",
99
+ "active": false,
100
+ "avatarUrls": {
101
+ "48x48": "https://avatar-management.atlassian.net/default/48",
102
+ "24x24": "https://avatar-management.atlassian.net/default/24",
103
+ "16x16": "https://avatar-management.atlassian.net/default/16",
104
+ "32x32": "https://avatar-management.atlassian.net/default/32"
105
+ },
106
+ "self": "https://acmecorp.atlassian.net/rest/api/3/user?accountId=5b10f7c882e05b22cc7d6d04",
107
+ "timeZone": "Europe/Berlin",
108
+ "createdAt": "2023-01-20T00:00:00.000Z",
109
+ "updatedAt": "2024-03-15T00:00:00.000Z"
110
+ }
111
+ ],
112
+ "projects": [
113
+ {
114
+ "id": 1,
115
+ "key": "PLAT",
116
+ "name": "Platform",
117
+ "description": "Core platform services and infrastructure",
118
+ "projectTypeKey": "software",
119
+ "leadAccountId": "5b10a2844c20165700ede21g",
120
+ "avatarUrls": {
121
+ "48x48": "https://acmecorp.atlassian.net/secure/projectavatar?pid=10000&avatarId=10400&size=48",
122
+ "24x24": "https://acmecorp.atlassian.net/secure/projectavatar?pid=10000&avatarId=10400&size=24",
123
+ "16x16": "https://acmecorp.atlassian.net/secure/projectavatar?pid=10000&avatarId=10400&size=16",
124
+ "32x32": "https://acmecorp.atlassian.net/secure/projectavatar?pid=10000&avatarId=10400&size=32"
125
+ },
126
+ "self": "https://acmecorp.atlassian.net/rest/api/3/project/10000",
127
+ "simplified": false,
128
+ "style": "classic",
129
+ "createdAt": "2023-01-15T00:00:00.000Z",
130
+ "updatedAt": "2024-06-01T00:00:00.000Z"
131
+ },
132
+ {
133
+ "id": 2,
134
+ "key": "MOBILE",
135
+ "name": "Mobile App",
136
+ "description": "iOS and Android mobile application",
137
+ "projectTypeKey": "software",
138
+ "leadAccountId": "5b10ac8d82e05b22cc7d4ef5",
139
+ "avatarUrls": {
140
+ "48x48": "https://acmecorp.atlassian.net/secure/projectavatar?pid=10001&avatarId=10401&size=48",
141
+ "24x24": "https://acmecorp.atlassian.net/secure/projectavatar?pid=10001&avatarId=10401&size=24",
142
+ "16x16": "https://acmecorp.atlassian.net/secure/projectavatar?pid=10001&avatarId=10401&size=16",
143
+ "32x32": "https://acmecorp.atlassian.net/secure/projectavatar?pid=10001&avatarId=10401&size=32"
144
+ },
145
+ "self": "https://acmecorp.atlassian.net/rest/api/3/project/10001",
146
+ "simplified": false,
147
+ "style": "classic",
148
+ "createdAt": "2023-06-01T00:00:00.000Z",
149
+ "updatedAt": "2024-06-01T00:00:00.000Z"
150
+ },
151
+ {
152
+ "id": 3,
153
+ "key": "OPS",
154
+ "name": "DevOps",
155
+ "description": "Infrastructure, CI/CD, and operations",
156
+ "projectTypeKey": "software",
157
+ "leadAccountId": "5b10f2c482e05b22cc7d9a01",
158
+ "avatarUrls": {
159
+ "48x48": "https://acmecorp.atlassian.net/secure/projectavatar?pid=10002&avatarId=10402&size=48",
160
+ "24x24": "https://acmecorp.atlassian.net/secure/projectavatar?pid=10002&avatarId=10402&size=24",
161
+ "16x16": "https://acmecorp.atlassian.net/secure/projectavatar?pid=10002&avatarId=10402&size=16",
162
+ "32x32": "https://acmecorp.atlassian.net/secure/projectavatar?pid=10002&avatarId=10402&size=32"
163
+ },
164
+ "self": "https://acmecorp.atlassian.net/rest/api/3/project/10002",
165
+ "simplified": false,
166
+ "style": "classic",
167
+ "createdAt": "2023-09-01T00:00:00.000Z",
168
+ "updatedAt": "2024-06-01T00:00:00.000Z"
169
+ }
170
+ ],
171
+ "issueTypes": [
172
+ {
173
+ "id": 1,
174
+ "name": "Epic",
175
+ "description": "A big user story that needs to be broken down.",
176
+ "subtask": false,
177
+ "projectId": 1,
178
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/issuetypes/epic.svg",
179
+ "hierarchyLevel": 1,
180
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issuetype/10000",
181
+ "createdAt": "2023-01-15T00:00:00.000Z",
182
+ "updatedAt": "2023-01-15T00:00:00.000Z"
183
+ },
184
+ {
185
+ "id": 2,
186
+ "name": "Story",
187
+ "description": "A user story.",
188
+ "subtask": false,
189
+ "projectId": 1,
190
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/issuetypes/story.svg",
191
+ "hierarchyLevel": 0,
192
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issuetype/10001",
193
+ "createdAt": "2023-01-15T00:00:00.000Z",
194
+ "updatedAt": "2023-01-15T00:00:00.000Z"
195
+ },
196
+ {
197
+ "id": 3,
198
+ "name": "Task",
199
+ "description": "A task that needs to be done.",
200
+ "subtask": false,
201
+ "projectId": 1,
202
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/issuetypes/task.svg",
203
+ "hierarchyLevel": 0,
204
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issuetype/10002",
205
+ "createdAt": "2023-01-15T00:00:00.000Z",
206
+ "updatedAt": "2023-01-15T00:00:00.000Z"
207
+ },
208
+ {
209
+ "id": 4,
210
+ "name": "Bug",
211
+ "description": "A problem which impairs or prevents the functions of the product.",
212
+ "subtask": false,
213
+ "projectId": 1,
214
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/issuetypes/bug.svg",
215
+ "hierarchyLevel": 0,
216
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issuetype/10003",
217
+ "createdAt": "2023-01-15T00:00:00.000Z",
218
+ "updatedAt": "2023-01-15T00:00:00.000Z"
219
+ },
220
+ {
221
+ "id": 5,
222
+ "name": "Subtask",
223
+ "description": "A subtask of an issue.",
224
+ "subtask": true,
225
+ "projectId": 1,
226
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/issuetypes/subtask.svg",
227
+ "hierarchyLevel": -1,
228
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issuetype/10004",
229
+ "createdAt": "2023-01-15T00:00:00.000Z",
230
+ "updatedAt": "2023-01-15T00:00:00.000Z"
231
+ },
232
+ {
233
+ "id": 6,
234
+ "name": "Epic",
235
+ "description": "A big user story that needs to be broken down.",
236
+ "subtask": false,
237
+ "projectId": 2,
238
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/issuetypes/epic.svg",
239
+ "hierarchyLevel": 1,
240
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issuetype/10005",
241
+ "createdAt": "2023-06-01T00:00:00.000Z",
242
+ "updatedAt": "2023-06-01T00:00:00.000Z"
243
+ },
244
+ {
245
+ "id": 7,
246
+ "name": "Story",
247
+ "description": "A user story.",
248
+ "subtask": false,
249
+ "projectId": 2,
250
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/issuetypes/story.svg",
251
+ "hierarchyLevel": 0,
252
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issuetype/10006",
253
+ "createdAt": "2023-06-01T00:00:00.000Z",
254
+ "updatedAt": "2023-06-01T00:00:00.000Z"
255
+ },
256
+ {
257
+ "id": 8,
258
+ "name": "Bug",
259
+ "description": "A problem which impairs or prevents the functions of the product.",
260
+ "subtask": false,
261
+ "projectId": 2,
262
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/issuetypes/bug.svg",
263
+ "hierarchyLevel": 0,
264
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issuetype/10007",
265
+ "createdAt": "2023-06-01T00:00:00.000Z",
266
+ "updatedAt": "2023-06-01T00:00:00.000Z"
267
+ },
268
+ {
269
+ "id": 9,
270
+ "name": "Task",
271
+ "description": "A task that needs to be done.",
272
+ "subtask": false,
273
+ "projectId": 3,
274
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/issuetypes/task.svg",
275
+ "hierarchyLevel": 0,
276
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issuetype/10008",
277
+ "createdAt": "2023-09-01T00:00:00.000Z",
278
+ "updatedAt": "2023-09-01T00:00:00.000Z"
279
+ },
280
+ {
281
+ "id": 10,
282
+ "name": "Bug",
283
+ "description": "A problem which impairs or prevents the functions of the product.",
284
+ "subtask": false,
285
+ "projectId": 3,
286
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/issuetypes/bug.svg",
287
+ "hierarchyLevel": 0,
288
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issuetype/10009",
289
+ "createdAt": "2023-09-01T00:00:00.000Z",
290
+ "updatedAt": "2023-09-01T00:00:00.000Z"
291
+ },
292
+ {
293
+ "id": 11,
294
+ "name": "Subtask",
295
+ "description": "A subtask of an issue.",
296
+ "subtask": true,
297
+ "projectId": 2,
298
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/issuetypes/subtask.svg",
299
+ "hierarchyLevel": -1,
300
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issuetype/10010",
301
+ "createdAt": "2023-06-01T00:00:00.000Z",
302
+ "updatedAt": "2023-06-01T00:00:00.000Z"
303
+ },
304
+ {
305
+ "id": 12,
306
+ "name": "Subtask",
307
+ "description": "A subtask of an issue.",
308
+ "subtask": true,
309
+ "projectId": 3,
310
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/issuetypes/subtask.svg",
311
+ "hierarchyLevel": -1,
312
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issuetype/10011",
313
+ "createdAt": "2023-09-01T00:00:00.000Z",
314
+ "updatedAt": "2023-09-01T00:00:00.000Z"
315
+ }
316
+ ],
317
+ "statusCategories": [
318
+ {
319
+ "id": 1,
320
+ "key": "undefined",
321
+ "name": "No Category",
322
+ "colorName": "medium-gray",
323
+ "self": "https://acmecorp.atlassian.net/rest/api/3/statuscategory/1",
324
+ "createdAt": "2023-01-15T00:00:00.000Z",
325
+ "updatedAt": "2023-01-15T00:00:00.000Z"
326
+ },
327
+ {
328
+ "id": 2,
329
+ "key": "new",
330
+ "name": "To Do",
331
+ "colorName": "blue-gray",
332
+ "self": "https://acmecorp.atlassian.net/rest/api/3/statuscategory/2",
333
+ "createdAt": "2023-01-15T00:00:00.000Z",
334
+ "updatedAt": "2023-01-15T00:00:00.000Z"
335
+ },
336
+ {
337
+ "id": 3,
338
+ "key": "indeterminate",
339
+ "name": "In Progress",
340
+ "colorName": "yellow",
341
+ "self": "https://acmecorp.atlassian.net/rest/api/3/statuscategory/3",
342
+ "createdAt": "2023-01-15T00:00:00.000Z",
343
+ "updatedAt": "2023-01-15T00:00:00.000Z"
344
+ },
345
+ {
346
+ "id": 4,
347
+ "key": "done",
348
+ "name": "Done",
349
+ "colorName": "green",
350
+ "self": "https://acmecorp.atlassian.net/rest/api/3/statuscategory/4",
351
+ "createdAt": "2023-01-15T00:00:00.000Z",
352
+ "updatedAt": "2023-01-15T00:00:00.000Z"
353
+ }
354
+ ],
355
+ "statuses": [
356
+ {
357
+ "id": 1,
358
+ "name": "To Do",
359
+ "description": "Issue is open and not started.",
360
+ "statusCategoryId": 2,
361
+ "projectId": 1,
362
+ "self": "https://acmecorp.atlassian.net/rest/api/3/status/10000",
363
+ "createdAt": "2023-01-15T00:00:00.000Z",
364
+ "updatedAt": "2023-01-15T00:00:00.000Z"
365
+ },
366
+ {
367
+ "id": 2,
368
+ "name": "In Progress",
369
+ "description": "Issue is being actively worked on.",
370
+ "statusCategoryId": 3,
371
+ "projectId": 1,
372
+ "self": "https://acmecorp.atlassian.net/rest/api/3/status/10001",
373
+ "createdAt": "2023-01-15T00:00:00.000Z",
374
+ "updatedAt": "2023-01-15T00:00:00.000Z"
375
+ },
376
+ {
377
+ "id": 3,
378
+ "name": "In Review",
379
+ "description": "Issue is in code review.",
380
+ "statusCategoryId": 3,
381
+ "projectId": 1,
382
+ "self": "https://acmecorp.atlassian.net/rest/api/3/status/10002",
383
+ "createdAt": "2023-01-15T00:00:00.000Z",
384
+ "updatedAt": "2023-01-15T00:00:00.000Z"
385
+ },
386
+ {
387
+ "id": 4,
388
+ "name": "Done",
389
+ "description": "Issue is complete.",
390
+ "statusCategoryId": 4,
391
+ "projectId": 1,
392
+ "self": "https://acmecorp.atlassian.net/rest/api/3/status/10003",
393
+ "createdAt": "2023-01-15T00:00:00.000Z",
394
+ "updatedAt": "2023-01-15T00:00:00.000Z"
395
+ },
396
+ {
397
+ "id": 5,
398
+ "name": "To Do",
399
+ "description": "Issue is open and not started.",
400
+ "statusCategoryId": 2,
401
+ "projectId": 2,
402
+ "self": "https://acmecorp.atlassian.net/rest/api/3/status/10004",
403
+ "createdAt": "2023-06-01T00:00:00.000Z",
404
+ "updatedAt": "2023-06-01T00:00:00.000Z"
405
+ },
406
+ {
407
+ "id": 6,
408
+ "name": "In Progress",
409
+ "description": "Issue is being actively worked on.",
410
+ "statusCategoryId": 3,
411
+ "projectId": 2,
412
+ "self": "https://acmecorp.atlassian.net/rest/api/3/status/10005",
413
+ "createdAt": "2023-06-01T00:00:00.000Z",
414
+ "updatedAt": "2023-06-01T00:00:00.000Z"
415
+ },
416
+ {
417
+ "id": 7,
418
+ "name": "Done",
419
+ "description": "Issue is complete.",
420
+ "statusCategoryId": 4,
421
+ "projectId": 2,
422
+ "self": "https://acmecorp.atlassian.net/rest/api/3/status/10006",
423
+ "createdAt": "2023-06-01T00:00:00.000Z",
424
+ "updatedAt": "2023-06-01T00:00:00.000Z"
425
+ },
426
+ {
427
+ "id": 8,
428
+ "name": "To Do",
429
+ "description": "Issue is open and not started.",
430
+ "statusCategoryId": 2,
431
+ "projectId": 3,
432
+ "self": "https://acmecorp.atlassian.net/rest/api/3/status/10007",
433
+ "createdAt": "2023-09-01T00:00:00.000Z",
434
+ "updatedAt": "2023-09-01T00:00:00.000Z"
435
+ },
436
+ {
437
+ "id": 9,
438
+ "name": "In Progress",
439
+ "description": "Issue is being actively worked on.",
440
+ "statusCategoryId": 3,
441
+ "projectId": 3,
442
+ "self": "https://acmecorp.atlassian.net/rest/api/3/status/10008",
443
+ "createdAt": "2023-09-01T00:00:00.000Z",
444
+ "updatedAt": "2023-09-01T00:00:00.000Z"
445
+ },
446
+ {
447
+ "id": 10,
448
+ "name": "Done",
449
+ "description": "Issue is complete.",
450
+ "statusCategoryId": 4,
451
+ "projectId": 3,
452
+ "self": "https://acmecorp.atlassian.net/rest/api/3/status/10009",
453
+ "createdAt": "2023-09-01T00:00:00.000Z",
454
+ "updatedAt": "2023-09-01T00:00:00.000Z"
455
+ }
456
+ ],
457
+ "priorities": [
458
+ {
459
+ "id": 1,
460
+ "name": "Highest",
461
+ "description": "This problem will block progress.",
462
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/priorities/highest.svg",
463
+ "self": "https://acmecorp.atlassian.net/rest/api/3/priority/1",
464
+ "createdAt": "2023-01-15T00:00:00.000Z",
465
+ "updatedAt": "2023-01-15T00:00:00.000Z"
466
+ },
467
+ {
468
+ "id": 2,
469
+ "name": "High",
470
+ "description": "Serious problem that could block progress.",
471
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/priorities/high.svg",
472
+ "self": "https://acmecorp.atlassian.net/rest/api/3/priority/2",
473
+ "createdAt": "2023-01-15T00:00:00.000Z",
474
+ "updatedAt": "2023-01-15T00:00:00.000Z"
475
+ },
476
+ {
477
+ "id": 3,
478
+ "name": "Medium",
479
+ "description": "Has the potential to affect progress.",
480
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/priorities/medium.svg",
481
+ "self": "https://acmecorp.atlassian.net/rest/api/3/priority/3",
482
+ "createdAt": "2023-01-15T00:00:00.000Z",
483
+ "updatedAt": "2023-01-15T00:00:00.000Z"
484
+ },
485
+ {
486
+ "id": 4,
487
+ "name": "Low",
488
+ "description": "Minor problem or easily worked around.",
489
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/priorities/low.svg",
490
+ "self": "https://acmecorp.atlassian.net/rest/api/3/priority/4",
491
+ "createdAt": "2023-01-15T00:00:00.000Z",
492
+ "updatedAt": "2023-01-15T00:00:00.000Z"
493
+ },
494
+ {
495
+ "id": 5,
496
+ "name": "Lowest",
497
+ "description": "Trivial problem with little or no impact on progress.",
498
+ "iconUrl": "https://acmecorp.atlassian.net/images/icons/priorities/lowest.svg",
499
+ "self": "https://acmecorp.atlassian.net/rest/api/3/priority/5",
500
+ "createdAt": "2023-01-15T00:00:00.000Z",
501
+ "updatedAt": "2023-01-15T00:00:00.000Z"
502
+ }
503
+ ],
504
+ "issues": [
505
+ {
506
+ "id": 1,
507
+ "key": "PLAT-1",
508
+ "projectId": 1,
509
+ "issueTypeId": 1,
510
+ "summary": "API Gateway v2 Migration",
511
+ "description": {
512
+ "type": "doc",
513
+ "version": 1,
514
+ "content": [
515
+ {
516
+ "type": "paragraph",
517
+ "content": [
518
+ {
519
+ "type": "text",
520
+ "text": "Migrate all services from API Gateway v1 to v2. Includes rate limiting, request transformation, and OAuth2 scopes."
521
+ }
522
+ ]
523
+ }
524
+ ]
525
+ },
526
+ "statusId": 2,
527
+ "priorityId": 1,
528
+ "assigneeAccountId": "5b10a2844c20165700ede21g",
529
+ "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
530
+ "labels": [
531
+ "platform",
532
+ "migration",
533
+ "q3"
534
+ ],
535
+ "componentIds": [],
536
+ "fixVersionIds": [
537
+ 1
538
+ ],
539
+ "parentKey": null,
540
+ "storyPoints": null,
541
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-1",
542
+ "resolution": null,
543
+ "resolutionDate": null,
544
+ "createdAt": "2024-01-15T09:00:00.000Z",
545
+ "updatedAt": "2024-06-20T14:30:00.000Z"
546
+ },
547
+ {
548
+ "id": 2,
549
+ "key": "PLAT-2",
550
+ "projectId": 1,
551
+ "issueTypeId": 2,
552
+ "summary": "Implement OAuth2 scope validation middleware",
553
+ "description": {
554
+ "type": "doc",
555
+ "version": 1,
556
+ "content": [
557
+ {
558
+ "type": "paragraph",
559
+ "content": [
560
+ {
561
+ "type": "text",
562
+ "text": "Add middleware to validate OAuth2 scopes on every inbound request. Must support both user and service account tokens."
563
+ }
564
+ ]
565
+ }
566
+ ]
567
+ },
568
+ "statusId": 3,
569
+ "priorityId": 2,
570
+ "assigneeAccountId": "5b10d3a482e05b22cc7d8b02",
571
+ "reporterAccountId": "5b10a2844c20165700ede21g",
572
+ "labels": [
573
+ "platform",
574
+ "security"
575
+ ],
576
+ "componentIds": [],
577
+ "fixVersionIds": [
578
+ 1
579
+ ],
580
+ "parentKey": "PLAT-1",
581
+ "storyPoints": 8,
582
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-2",
583
+ "resolution": null,
584
+ "resolutionDate": null,
585
+ "createdAt": "2024-02-01T10:00:00.000Z",
586
+ "updatedAt": "2024-06-18T11:00:00.000Z"
587
+ },
588
+ {
589
+ "id": 3,
590
+ "key": "PLAT-3",
591
+ "projectId": 1,
592
+ "issueTypeId": 2,
593
+ "summary": "Rate limiting per-tenant configuration",
594
+ "description": {
595
+ "type": "doc",
596
+ "version": 1,
597
+ "content": [
598
+ {
599
+ "type": "paragraph",
600
+ "content": [
601
+ {
602
+ "type": "text",
603
+ "text": "Allow per-tenant rate limit configuration via admin API. Default to 1000 req/min, configurable up to 10000."
604
+ }
605
+ ]
606
+ }
607
+ ]
608
+ },
609
+ "statusId": 2,
610
+ "priorityId": 2,
611
+ "assigneeAccountId": "5b10e5b682e05b22cc7d7c03",
612
+ "reporterAccountId": "5b10a2844c20165700ede21g",
613
+ "labels": [
614
+ "platform",
615
+ "rate-limiting"
616
+ ],
617
+ "componentIds": [],
618
+ "fixVersionIds": [
619
+ 1
620
+ ],
621
+ "parentKey": "PLAT-1",
622
+ "storyPoints": 5,
623
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-3",
624
+ "resolution": null,
625
+ "resolutionDate": null,
626
+ "createdAt": "2024-02-05T09:00:00.000Z",
627
+ "updatedAt": "2024-06-15T10:00:00.000Z"
628
+ },
629
+ {
630
+ "id": 4,
631
+ "key": "PLAT-4",
632
+ "projectId": 1,
633
+ "issueTypeId": 4,
634
+ "summary": "Memory leak in connection pool under high concurrency",
635
+ "description": {
636
+ "type": "doc",
637
+ "version": 1,
638
+ "content": [
639
+ {
640
+ "type": "paragraph",
641
+ "content": [
642
+ {
643
+ "type": "text",
644
+ "text": "Under sustained load (>5000 concurrent connections), the connection pool grows unbounded. Heap dump shows leaked PreparedStatement handles."
645
+ }
646
+ ]
647
+ }
648
+ ]
649
+ },
650
+ "statusId": 1,
651
+ "priorityId": 1,
652
+ "assigneeAccountId": null,
653
+ "reporterAccountId": "5b10ac8d82e05b22cc7d4ef5",
654
+ "labels": [
655
+ "bug",
656
+ "performance",
657
+ "critical"
658
+ ],
659
+ "componentIds": [],
660
+ "fixVersionIds": [],
661
+ "parentKey": null,
662
+ "storyPoints": 3,
663
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-4",
664
+ "resolution": null,
665
+ "resolutionDate": null,
666
+ "createdAt": "2024-06-10T15:30:00.000Z",
667
+ "updatedAt": "2024-06-10T15:30:00.000Z"
668
+ },
669
+ {
670
+ "id": 5,
671
+ "key": "PLAT-5",
672
+ "projectId": 1,
673
+ "issueTypeId": 3,
674
+ "summary": "Upgrade PostgreSQL driver to v5",
675
+ "description": {
676
+ "type": "doc",
677
+ "version": 1,
678
+ "content": [
679
+ {
680
+ "type": "paragraph",
681
+ "content": [
682
+ {
683
+ "type": "text",
684
+ "text": "Upgrade pg driver from 4.x to 5.x. Breaking changes in connection string format and pool configuration."
685
+ }
686
+ ]
687
+ }
688
+ ]
689
+ },
690
+ "statusId": 4,
691
+ "priorityId": 3,
692
+ "assigneeAccountId": "5b10f2c482e05b22cc7d9a01",
693
+ "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
694
+ "labels": [
695
+ "platform",
696
+ "dependencies"
697
+ ],
698
+ "componentIds": [],
699
+ "fixVersionIds": [
700
+ 2
701
+ ],
702
+ "parentKey": null,
703
+ "storyPoints": 3,
704
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-5",
705
+ "resolution": "Done",
706
+ "resolutionDate": "2024-05-28T16:00:00.000Z",
707
+ "createdAt": "2024-05-01T08:00:00.000Z",
708
+ "updatedAt": "2024-05-28T16:00:00.000Z"
709
+ },
710
+ {
711
+ "id": 6,
712
+ "key": "PLAT-6",
713
+ "projectId": 1,
714
+ "issueTypeId": 3,
715
+ "summary": "Add OpenTelemetry tracing to auth service",
716
+ "description": {
717
+ "type": "doc",
718
+ "version": 1,
719
+ "content": [
720
+ {
721
+ "type": "paragraph",
722
+ "content": [
723
+ {
724
+ "type": "text",
725
+ "text": "Instrument the authentication service with OpenTelemetry spans for login, token refresh, and session validation."
726
+ }
727
+ ]
728
+ }
729
+ ]
730
+ },
731
+ "statusId": 4,
732
+ "priorityId": 4,
733
+ "assigneeAccountId": "5b10d3a482e05b22cc7d8b02",
734
+ "reporterAccountId": "5b10a2844c20165700ede21g",
735
+ "labels": [
736
+ "observability"
737
+ ],
738
+ "componentIds": [],
739
+ "fixVersionIds": [
740
+ 2
741
+ ],
742
+ "parentKey": null,
743
+ "storyPoints": 5,
744
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-6",
745
+ "resolution": "Done",
746
+ "resolutionDate": "2024-05-15T14:00:00.000Z",
747
+ "createdAt": "2024-04-10T09:00:00.000Z",
748
+ "updatedAt": "2024-05-15T14:00:00.000Z"
749
+ },
750
+ {
751
+ "id": 7,
752
+ "key": "PLAT-7",
753
+ "projectId": 1,
754
+ "issueTypeId": 2,
755
+ "summary": "Request transformation pipeline",
756
+ "description": {
757
+ "type": "doc",
758
+ "version": 1,
759
+ "content": [
760
+ {
761
+ "type": "paragraph",
762
+ "content": [
763
+ {
764
+ "type": "text",
765
+ "text": "Build a configurable request/response transformation pipeline for the API gateway. Support header injection, body mapping, and URL rewriting."
766
+ }
767
+ ]
768
+ }
769
+ ]
770
+ },
771
+ "statusId": 1,
772
+ "priorityId": 3,
773
+ "assigneeAccountId": null,
774
+ "reporterAccountId": "5b10a2844c20165700ede21g",
775
+ "labels": [
776
+ "platform",
777
+ "gateway"
778
+ ],
779
+ "componentIds": [],
780
+ "fixVersionIds": [
781
+ 1
782
+ ],
783
+ "parentKey": "PLAT-1",
784
+ "storyPoints": 13,
785
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-7",
786
+ "resolution": null,
787
+ "resolutionDate": null,
788
+ "createdAt": "2024-03-01T09:00:00.000Z",
789
+ "updatedAt": "2024-03-01T09:00:00.000Z"
790
+ },
791
+ {
792
+ "id": 8,
793
+ "key": "MOBILE-1",
794
+ "projectId": 2,
795
+ "issueTypeId": 6,
796
+ "summary": "Push Notification Overhaul",
797
+ "description": {
798
+ "type": "doc",
799
+ "version": 1,
800
+ "content": [
801
+ {
802
+ "type": "paragraph",
803
+ "content": [
804
+ {
805
+ "type": "text",
806
+ "text": "Redesign push notification system to support rich media, action buttons, and notification grouping. Must work on both iOS and Android."
807
+ }
808
+ ]
809
+ }
810
+ ]
811
+ },
812
+ "statusId": 6,
813
+ "priorityId": 2,
814
+ "assigneeAccountId": "5b10ac8d82e05b22cc7d4ef5",
815
+ "reporterAccountId": "5b10ac8d82e05b22cc7d4ef5",
816
+ "labels": [
817
+ "mobile",
818
+ "notifications"
819
+ ],
820
+ "componentIds": [],
821
+ "fixVersionIds": [
822
+ 3
823
+ ],
824
+ "parentKey": null,
825
+ "storyPoints": null,
826
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/MOBILE-1",
827
+ "resolution": null,
828
+ "resolutionDate": null,
829
+ "createdAt": "2024-04-01T10:00:00.000Z",
830
+ "updatedAt": "2024-06-19T09:00:00.000Z"
831
+ },
832
+ {
833
+ "id": 9,
834
+ "key": "MOBILE-2",
835
+ "projectId": 2,
836
+ "issueTypeId": 7,
837
+ "summary": "Implement rich push notifications with images",
838
+ "description": {
839
+ "type": "doc",
840
+ "version": 1,
841
+ "content": [
842
+ {
843
+ "type": "paragraph",
844
+ "content": [
845
+ {
846
+ "type": "text",
847
+ "text": "Add support for image attachments in push notifications. Use notification service extension on iOS, BigPictureStyle on Android."
848
+ }
849
+ ]
850
+ }
851
+ ]
852
+ },
853
+ "statusId": 7,
854
+ "priorityId": 2,
855
+ "assigneeAccountId": "5b10ac8d82e05b22cc7d4ef5",
856
+ "reporterAccountId": "5b10ac8d82e05b22cc7d4ef5",
857
+ "labels": [
858
+ "mobile",
859
+ "notifications",
860
+ "ios",
861
+ "android"
862
+ ],
863
+ "componentIds": [],
864
+ "fixVersionIds": [
865
+ 3
866
+ ],
867
+ "parentKey": "MOBILE-1",
868
+ "storyPoints": 8,
869
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/MOBILE-2",
870
+ "resolution": "Done",
871
+ "resolutionDate": "2024-06-05T16:00:00.000Z",
872
+ "createdAt": "2024-04-15T10:00:00.000Z",
873
+ "updatedAt": "2024-06-05T16:00:00.000Z"
874
+ },
875
+ {
876
+ "id": 10,
877
+ "key": "MOBILE-3",
878
+ "projectId": 2,
879
+ "issueTypeId": 8,
880
+ "summary": "App crashes on Android 13 when opening deep links",
881
+ "description": {
882
+ "type": "doc",
883
+ "version": 1,
884
+ "content": [
885
+ {
886
+ "type": "paragraph",
887
+ "content": [
888
+ {
889
+ "type": "text",
890
+ "text": "App crashes with NullPointerException when handling deep links on Android 13 devices. Stack trace points to IntentFilter resolution."
891
+ }
892
+ ]
893
+ }
894
+ ]
895
+ },
896
+ "statusId": 5,
897
+ "priorityId": 1,
898
+ "assigneeAccountId": null,
899
+ "reporterAccountId": "5b10d3a482e05b22cc7d8b02",
900
+ "labels": [
901
+ "bug",
902
+ "android",
903
+ "crash"
904
+ ],
905
+ "componentIds": [],
906
+ "fixVersionIds": [],
907
+ "parentKey": null,
908
+ "storyPoints": 3,
909
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/MOBILE-3",
910
+ "resolution": null,
911
+ "resolutionDate": null,
912
+ "createdAt": "2024-06-18T14:00:00.000Z",
913
+ "updatedAt": "2024-06-18T14:00:00.000Z"
914
+ },
915
+ {
916
+ "id": 11,
917
+ "key": "MOBILE-4",
918
+ "projectId": 2,
919
+ "issueTypeId": 7,
920
+ "summary": "Add notification action buttons",
921
+ "description": {
922
+ "type": "doc",
923
+ "version": 1,
924
+ "content": [
925
+ {
926
+ "type": "paragraph",
927
+ "content": [
928
+ {
929
+ "type": "text",
930
+ "text": "Support up to 3 action buttons on push notifications (e.g., Reply, Archive, Mark as Read)."
931
+ }
932
+ ]
933
+ }
934
+ ]
935
+ },
936
+ "statusId": 6,
937
+ "priorityId": 3,
938
+ "assigneeAccountId": "5b10ac8d82e05b22cc7d4ef5",
939
+ "reporterAccountId": "5b10ac8d82e05b22cc7d4ef5",
940
+ "labels": [
941
+ "mobile",
942
+ "notifications"
943
+ ],
944
+ "componentIds": [],
945
+ "fixVersionIds": [
946
+ 3
947
+ ],
948
+ "parentKey": "MOBILE-1",
949
+ "storyPoints": 5,
950
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/MOBILE-4",
951
+ "resolution": null,
952
+ "resolutionDate": null,
953
+ "createdAt": "2024-05-01T10:00:00.000Z",
954
+ "updatedAt": "2024-06-17T11:00:00.000Z"
955
+ },
956
+ {
957
+ "id": 12,
958
+ "key": "OPS-1",
959
+ "projectId": 3,
960
+ "issueTypeId": 9,
961
+ "summary": "Set up Kubernetes autoscaling for production",
962
+ "description": {
963
+ "type": "doc",
964
+ "version": 1,
965
+ "content": [
966
+ {
967
+ "type": "paragraph",
968
+ "content": [
969
+ {
970
+ "type": "text",
971
+ "text": "Configure HPA for all production deployments. Target 70% CPU, 80% memory. Min 3 replicas, max 50."
972
+ }
973
+ ]
974
+ }
975
+ ]
976
+ },
977
+ "statusId": 10,
978
+ "priorityId": 2,
979
+ "assigneeAccountId": "5b10f2c482e05b22cc7d9a01",
980
+ "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
981
+ "labels": [
982
+ "infra",
983
+ "kubernetes",
984
+ "autoscaling"
985
+ ],
986
+ "componentIds": [],
987
+ "fixVersionIds": [],
988
+ "parentKey": null,
989
+ "storyPoints": 5,
990
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-1",
991
+ "resolution": "Done",
992
+ "resolutionDate": "2024-04-20T15:00:00.000Z",
993
+ "createdAt": "2024-03-15T09:00:00.000Z",
994
+ "updatedAt": "2024-04-20T15:00:00.000Z"
995
+ },
996
+ {
997
+ "id": 13,
998
+ "key": "OPS-2",
999
+ "projectId": 3,
1000
+ "issueTypeId": 10,
1001
+ "summary": "CI pipeline intermittently fails on integration tests",
1002
+ "description": {
1003
+ "type": "doc",
1004
+ "version": 1,
1005
+ "content": [
1006
+ {
1007
+ "type": "paragraph",
1008
+ "content": [
1009
+ {
1010
+ "type": "text",
1011
+ "text": "Integration tests fail ~15% of the time with connection timeout errors. Suspect test database connection pool exhaustion."
1012
+ }
1013
+ ]
1014
+ }
1015
+ ]
1016
+ },
1017
+ "statusId": 9,
1018
+ "priorityId": 2,
1019
+ "assigneeAccountId": "5b10e5b682e05b22cc7d7c03",
1020
+ "reporterAccountId": "5b10d3a482e05b22cc7d8b02",
1021
+ "labels": [
1022
+ "bug",
1023
+ "ci",
1024
+ "flaky-tests"
1025
+ ],
1026
+ "componentIds": [],
1027
+ "fixVersionIds": [],
1028
+ "parentKey": null,
1029
+ "storyPoints": 3,
1030
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-2",
1031
+ "resolution": null,
1032
+ "resolutionDate": null,
1033
+ "createdAt": "2024-06-12T10:00:00.000Z",
1034
+ "updatedAt": "2024-06-19T16:00:00.000Z"
1035
+ },
1036
+ {
1037
+ "id": 14,
1038
+ "key": "OPS-3",
1039
+ "projectId": 3,
1040
+ "issueTypeId": 9,
1041
+ "summary": "Migrate secrets to HashiCorp Vault",
1042
+ "description": {
1043
+ "type": "doc",
1044
+ "version": 1,
1045
+ "content": [
1046
+ {
1047
+ "type": "paragraph",
1048
+ "content": [
1049
+ {
1050
+ "type": "text",
1051
+ "text": "Move all application secrets from K8s secrets to HashiCorp Vault. Set up auto-rotation for database credentials."
1052
+ }
1053
+ ]
1054
+ }
1055
+ ]
1056
+ },
1057
+ "statusId": 8,
1058
+ "priorityId": 3,
1059
+ "assigneeAccountId": null,
1060
+ "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
1061
+ "labels": [
1062
+ "infra",
1063
+ "security",
1064
+ "secrets"
1065
+ ],
1066
+ "componentIds": [],
1067
+ "fixVersionIds": [],
1068
+ "parentKey": null,
1069
+ "storyPoints": 8,
1070
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-3",
1071
+ "resolution": null,
1072
+ "resolutionDate": null,
1073
+ "createdAt": "2024-06-01T08:00:00.000Z",
1074
+ "updatedAt": "2024-06-01T08:00:00.000Z"
1075
+ },
1076
+ {
1077
+ "id": 15,
1078
+ "key": "PLAT-8",
1079
+ "projectId": 1,
1080
+ "issueTypeId": 5,
1081
+ "summary": "Write OAuth2 scope validation tests",
1082
+ "description": {
1083
+ "type": "doc",
1084
+ "version": 1,
1085
+ "content": [
1086
+ {
1087
+ "type": "paragraph",
1088
+ "content": [
1089
+ {
1090
+ "type": "text",
1091
+ "text": "Unit and integration tests for the scope validation middleware."
1092
+ }
1093
+ ]
1094
+ }
1095
+ ]
1096
+ },
1097
+ "statusId": 2,
1098
+ "priorityId": 3,
1099
+ "assigneeAccountId": "5b10d3a482e05b22cc7d8b02",
1100
+ "reporterAccountId": "5b10a2844c20165700ede21g",
1101
+ "labels": [
1102
+ "testing"
1103
+ ],
1104
+ "componentIds": [],
1105
+ "fixVersionIds": [],
1106
+ "parentKey": "PLAT-2",
1107
+ "storyPoints": 3,
1108
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-8",
1109
+ "resolution": null,
1110
+ "resolutionDate": null,
1111
+ "createdAt": "2024-06-15T09:00:00.000Z",
1112
+ "updatedAt": "2024-06-18T10:00:00.000Z"
1113
+ },
1114
+ {
1115
+ "id": 16,
1116
+ "key": "PLAT-9",
1117
+ "projectId": 1,
1118
+ "issueTypeId": 5,
1119
+ "summary": "Document rate limit API endpoints",
1120
+ "description": {
1121
+ "type": "doc",
1122
+ "version": 1,
1123
+ "content": [
1124
+ {
1125
+ "type": "paragraph",
1126
+ "content": [
1127
+ {
1128
+ "type": "text",
1129
+ "text": "Write OpenAPI docs for the rate limit configuration API."
1130
+ }
1131
+ ]
1132
+ }
1133
+ ]
1134
+ },
1135
+ "statusId": 1,
1136
+ "priorityId": 4,
1137
+ "assigneeAccountId": null,
1138
+ "reporterAccountId": "5b10e5b682e05b22cc7d7c03",
1139
+ "labels": [
1140
+ "documentation"
1141
+ ],
1142
+ "componentIds": [],
1143
+ "fixVersionIds": [],
1144
+ "parentKey": "PLAT-3",
1145
+ "storyPoints": 2,
1146
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-9",
1147
+ "resolution": null,
1148
+ "resolutionDate": null,
1149
+ "createdAt": "2024-06-16T10:00:00.000Z",
1150
+ "updatedAt": "2024-06-16T10:00:00.000Z"
1151
+ },
1152
+ {
1153
+ "id": 17,
1154
+ "key": "PLAT-10",
1155
+ "projectId": 1,
1156
+ "issueTypeId": 5,
1157
+ "summary": "Implement header injection for transformation pipeline",
1158
+ "description": {
1159
+ "type": "doc",
1160
+ "version": 1,
1161
+ "content": [
1162
+ {
1163
+ "type": "paragraph",
1164
+ "content": [
1165
+ {
1166
+ "type": "text",
1167
+ "text": "Add header injection support to the request transformation pipeline."
1168
+ }
1169
+ ]
1170
+ }
1171
+ ]
1172
+ },
1173
+ "statusId": 1,
1174
+ "priorityId": 3,
1175
+ "assigneeAccountId": null,
1176
+ "reporterAccountId": "5b10a2844c20165700ede21g",
1177
+ "labels": [
1178
+ "platform",
1179
+ "gateway"
1180
+ ],
1181
+ "componentIds": [],
1182
+ "fixVersionIds": [
1183
+ 1
1184
+ ],
1185
+ "parentKey": "PLAT-7",
1186
+ "storyPoints": 5,
1187
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-10",
1188
+ "resolution": null,
1189
+ "resolutionDate": null,
1190
+ "createdAt": "2024-06-17T09:00:00.000Z",
1191
+ "updatedAt": "2024-06-17T09:00:00.000Z"
1192
+ },
1193
+ {
1194
+ "id": 18,
1195
+ "key": "PLAT-11",
1196
+ "projectId": 1,
1197
+ "issueTypeId": 4,
1198
+ "summary": "CORS headers missing on preflight responses",
1199
+ "description": {
1200
+ "type": "doc",
1201
+ "version": 1,
1202
+ "content": [
1203
+ {
1204
+ "type": "paragraph",
1205
+ "content": [
1206
+ {
1207
+ "type": "text",
1208
+ "text": "OPTIONS requests to the API gateway don't return proper Access-Control-Allow-Origin headers."
1209
+ }
1210
+ ]
1211
+ }
1212
+ ]
1213
+ },
1214
+ "statusId": 4,
1215
+ "priorityId": 2,
1216
+ "assigneeAccountId": "5b10a2844c20165700ede21g",
1217
+ "reporterAccountId": "5b10ac8d82e05b22cc7d4ef5",
1218
+ "labels": [
1219
+ "bug",
1220
+ "gateway"
1221
+ ],
1222
+ "componentIds": [],
1223
+ "fixVersionIds": [
1224
+ 2
1225
+ ],
1226
+ "parentKey": null,
1227
+ "storyPoints": 2,
1228
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-11",
1229
+ "resolution": "Done",
1230
+ "resolutionDate": "2024-05-20T10:00:00.000Z",
1231
+ "createdAt": "2024-05-10T08:00:00.000Z",
1232
+ "updatedAt": "2024-05-20T10:00:00.000Z"
1233
+ },
1234
+ {
1235
+ "id": 19,
1236
+ "key": "PLAT-12",
1237
+ "projectId": 1,
1238
+ "issueTypeId": 2,
1239
+ "summary": "Implement Redis caching layer for auth tokens",
1240
+ "description": {
1241
+ "type": "doc",
1242
+ "version": 1,
1243
+ "content": [
1244
+ {
1245
+ "type": "paragraph",
1246
+ "content": [
1247
+ {
1248
+ "type": "text",
1249
+ "text": "Cache validated auth tokens in Redis to reduce database lookups. TTL should match token expiry."
1250
+ }
1251
+ ]
1252
+ }
1253
+ ]
1254
+ },
1255
+ "statusId": 1,
1256
+ "priorityId": 3,
1257
+ "assigneeAccountId": null,
1258
+ "reporterAccountId": "5b10d3a482e05b22cc7d8b02",
1259
+ "labels": [
1260
+ "platform",
1261
+ "performance"
1262
+ ],
1263
+ "componentIds": [],
1264
+ "fixVersionIds": [],
1265
+ "parentKey": null,
1266
+ "storyPoints": 8,
1267
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-12",
1268
+ "resolution": null,
1269
+ "resolutionDate": null,
1270
+ "createdAt": "2024-06-19T09:00:00.000Z",
1271
+ "updatedAt": "2024-06-19T09:00:00.000Z"
1272
+ },
1273
+ {
1274
+ "id": 20,
1275
+ "key": "MOBILE-5",
1276
+ "projectId": 2,
1277
+ "issueTypeId": 7,
1278
+ "summary": "Notification grouping by category",
1279
+ "description": {
1280
+ "type": "doc",
1281
+ "version": 1,
1282
+ "content": [
1283
+ {
1284
+ "type": "paragraph",
1285
+ "content": [
1286
+ {
1287
+ "type": "text",
1288
+ "text": "Group notifications by category (messages, alerts, updates) on both iOS and Android."
1289
+ }
1290
+ ]
1291
+ }
1292
+ ]
1293
+ },
1294
+ "statusId": 5,
1295
+ "priorityId": 3,
1296
+ "assigneeAccountId": null,
1297
+ "reporterAccountId": "5b10ac8d82e05b22cc7d4ef5",
1298
+ "labels": [
1299
+ "mobile",
1300
+ "notifications"
1301
+ ],
1302
+ "componentIds": [],
1303
+ "fixVersionIds": [
1304
+ 3
1305
+ ],
1306
+ "parentKey": "MOBILE-1",
1307
+ "storyPoints": 5,
1308
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/MOBILE-5",
1309
+ "resolution": null,
1310
+ "resolutionDate": null,
1311
+ "createdAt": "2024-05-10T10:00:00.000Z",
1312
+ "updatedAt": "2024-05-10T10:00:00.000Z"
1313
+ },
1314
+ {
1315
+ "id": 21,
1316
+ "key": "MOBILE-6",
1317
+ "projectId": 2,
1318
+ "issueTypeId": 11,
1319
+ "summary": "iOS implementation of action buttons",
1320
+ "description": {
1321
+ "type": "doc",
1322
+ "version": 1,
1323
+ "content": [
1324
+ {
1325
+ "type": "paragraph",
1326
+ "content": [
1327
+ {
1328
+ "type": "text",
1329
+ "text": "Implement UNNotificationAction for notification action buttons on iOS."
1330
+ }
1331
+ ]
1332
+ }
1333
+ ]
1334
+ },
1335
+ "statusId": 6,
1336
+ "priorityId": 3,
1337
+ "assigneeAccountId": "5b10ac8d82e05b22cc7d4ef5",
1338
+ "reporterAccountId": "5b10ac8d82e05b22cc7d4ef5",
1339
+ "labels": [
1340
+ "mobile",
1341
+ "ios"
1342
+ ],
1343
+ "componentIds": [],
1344
+ "fixVersionIds": [
1345
+ 3
1346
+ ],
1347
+ "parentKey": "MOBILE-4",
1348
+ "storyPoints": 3,
1349
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/MOBILE-6",
1350
+ "resolution": null,
1351
+ "resolutionDate": null,
1352
+ "createdAt": "2024-05-15T10:00:00.000Z",
1353
+ "updatedAt": "2024-06-18T11:00:00.000Z"
1354
+ },
1355
+ {
1356
+ "id": 22,
1357
+ "key": "MOBILE-7",
1358
+ "projectId": 2,
1359
+ "issueTypeId": 8,
1360
+ "summary": "Push notifications not delivered on iOS 17.4",
1361
+ "description": {
1362
+ "type": "doc",
1363
+ "version": 1,
1364
+ "content": [
1365
+ {
1366
+ "type": "paragraph",
1367
+ "content": [
1368
+ {
1369
+ "type": "text",
1370
+ "text": "Users on iOS 17.4 report push notifications stop arriving after app update. APNs token registration succeeds but delivery fails silently."
1371
+ }
1372
+ ]
1373
+ }
1374
+ ]
1375
+ },
1376
+ "statusId": 7,
1377
+ "priorityId": 1,
1378
+ "assigneeAccountId": "5b10ac8d82e05b22cc7d4ef5",
1379
+ "reporterAccountId": "5b10d3a482e05b22cc7d8b02",
1380
+ "labels": [
1381
+ "bug",
1382
+ "ios",
1383
+ "notifications"
1384
+ ],
1385
+ "componentIds": [],
1386
+ "fixVersionIds": [
1387
+ 3
1388
+ ],
1389
+ "parentKey": null,
1390
+ "storyPoints": 5,
1391
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/MOBILE-7",
1392
+ "resolution": "Done",
1393
+ "resolutionDate": "2024-06-10T14:00:00.000Z",
1394
+ "createdAt": "2024-06-01T08:00:00.000Z",
1395
+ "updatedAt": "2024-06-10T14:00:00.000Z"
1396
+ },
1397
+ {
1398
+ "id": 23,
1399
+ "key": "MOBILE-8",
1400
+ "projectId": 2,
1401
+ "issueTypeId": 7,
1402
+ "summary": "Deep link handling for Android 14",
1403
+ "description": {
1404
+ "type": "doc",
1405
+ "version": 1,
1406
+ "content": [
1407
+ {
1408
+ "type": "paragraph",
1409
+ "content": [
1410
+ {
1411
+ "type": "text",
1412
+ "text": "Update deep link handling to comply with Android 14 intent filter changes."
1413
+ }
1414
+ ]
1415
+ }
1416
+ ]
1417
+ },
1418
+ "statusId": 6,
1419
+ "priorityId": 2,
1420
+ "assigneeAccountId": "5b10d3a482e05b22cc7d8b02",
1421
+ "reporterAccountId": "5b10ac8d82e05b22cc7d4ef5",
1422
+ "labels": [
1423
+ "mobile",
1424
+ "android"
1425
+ ],
1426
+ "componentIds": [],
1427
+ "fixVersionIds": [],
1428
+ "parentKey": null,
1429
+ "storyPoints": 5,
1430
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/MOBILE-8",
1431
+ "resolution": null,
1432
+ "resolutionDate": null,
1433
+ "createdAt": "2024-06-19T09:00:00.000Z",
1434
+ "updatedAt": "2024-06-20T11:00:00.000Z"
1435
+ },
1436
+ {
1437
+ "id": 24,
1438
+ "key": "OPS-4",
1439
+ "projectId": 3,
1440
+ "issueTypeId": 9,
1441
+ "summary": "Set up Grafana dashboards for production monitoring",
1442
+ "description": {
1443
+ "type": "doc",
1444
+ "version": 1,
1445
+ "content": [
1446
+ {
1447
+ "type": "paragraph",
1448
+ "content": [
1449
+ {
1450
+ "type": "text",
1451
+ "text": "Create Grafana dashboards for CPU, memory, request latency, and error rates. Include alerting thresholds."
1452
+ }
1453
+ ]
1454
+ }
1455
+ ]
1456
+ },
1457
+ "statusId": 9,
1458
+ "priorityId": 2,
1459
+ "assigneeAccountId": "5b10f2c482e05b22cc7d9a01",
1460
+ "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
1461
+ "labels": [
1462
+ "infra",
1463
+ "monitoring"
1464
+ ],
1465
+ "componentIds": [],
1466
+ "fixVersionIds": [],
1467
+ "parentKey": null,
1468
+ "storyPoints": 5,
1469
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-4",
1470
+ "resolution": null,
1471
+ "resolutionDate": null,
1472
+ "createdAt": "2024-06-15T09:00:00.000Z",
1473
+ "updatedAt": "2024-06-20T10:00:00.000Z"
1474
+ },
1475
+ {
1476
+ "id": 25,
1477
+ "key": "OPS-5",
1478
+ "projectId": 3,
1479
+ "issueTypeId": 9,
1480
+ "summary": "Implement automated database backup verification",
1481
+ "description": {
1482
+ "type": "doc",
1483
+ "version": 1,
1484
+ "content": [
1485
+ {
1486
+ "type": "paragraph",
1487
+ "content": [
1488
+ {
1489
+ "type": "text",
1490
+ "text": "Add automated restore-and-verify for nightly database backups. Alert if backup is older than 24h or restore fails."
1491
+ }
1492
+ ]
1493
+ }
1494
+ ]
1495
+ },
1496
+ "statusId": 10,
1497
+ "priorityId": 3,
1498
+ "assigneeAccountId": "5b10e5b682e05b22cc7d7c03",
1499
+ "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
1500
+ "labels": [
1501
+ "infra",
1502
+ "database",
1503
+ "backups"
1504
+ ],
1505
+ "componentIds": [],
1506
+ "fixVersionIds": [],
1507
+ "parentKey": null,
1508
+ "storyPoints": 5,
1509
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-5",
1510
+ "resolution": "Done",
1511
+ "resolutionDate": "2024-06-01T16:00:00.000Z",
1512
+ "createdAt": "2024-05-15T09:00:00.000Z",
1513
+ "updatedAt": "2024-06-01T16:00:00.000Z"
1514
+ },
1515
+ {
1516
+ "id": 26,
1517
+ "key": "OPS-6",
1518
+ "projectId": 3,
1519
+ "issueTypeId": 10,
1520
+ "summary": "Terraform plan fails on staging with provider version mismatch",
1521
+ "description": {
1522
+ "type": "doc",
1523
+ "version": 1,
1524
+ "content": [
1525
+ {
1526
+ "type": "paragraph",
1527
+ "content": [
1528
+ {
1529
+ "type": "text",
1530
+ "text": "Terraform plan on staging environment fails with 'provider version constraint not met'. Likely caused by lock file drift."
1531
+ }
1532
+ ]
1533
+ }
1534
+ ]
1535
+ },
1536
+ "statusId": 10,
1537
+ "priorityId": 2,
1538
+ "assigneeAccountId": "5b10f2c482e05b22cc7d9a01",
1539
+ "reporterAccountId": "5b10e5b682e05b22cc7d7c03",
1540
+ "labels": [
1541
+ "bug",
1542
+ "infra",
1543
+ "terraform"
1544
+ ],
1545
+ "componentIds": [],
1546
+ "fixVersionIds": [],
1547
+ "parentKey": null,
1548
+ "storyPoints": 2,
1549
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-6",
1550
+ "resolution": "Done",
1551
+ "resolutionDate": "2024-06-05T11:00:00.000Z",
1552
+ "createdAt": "2024-06-03T10:00:00.000Z",
1553
+ "updatedAt": "2024-06-05T11:00:00.000Z"
1554
+ },
1555
+ {
1556
+ "id": 27,
1557
+ "key": "OPS-7",
1558
+ "projectId": 3,
1559
+ "issueTypeId": 9,
1560
+ "summary": "Automate secret rotation for database credentials",
1561
+ "description": {
1562
+ "type": "doc",
1563
+ "version": 1,
1564
+ "content": [
1565
+ {
1566
+ "type": "paragraph",
1567
+ "content": [
1568
+ {
1569
+ "type": "text",
1570
+ "text": "Implement automated rotation of database credentials using Vault's dynamic secrets engine. Zero-downtime rotation."
1571
+ }
1572
+ ]
1573
+ }
1574
+ ]
1575
+ },
1576
+ "statusId": 8,
1577
+ "priorityId": 3,
1578
+ "assigneeAccountId": null,
1579
+ "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
1580
+ "labels": [
1581
+ "infra",
1582
+ "security",
1583
+ "vault"
1584
+ ],
1585
+ "componentIds": [],
1586
+ "fixVersionIds": [],
1587
+ "parentKey": null,
1588
+ "storyPoints": 8,
1589
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-7",
1590
+ "resolution": null,
1591
+ "resolutionDate": null,
1592
+ "createdAt": "2024-06-10T09:00:00.000Z",
1593
+ "updatedAt": "2024-06-10T09:00:00.000Z"
1594
+ },
1595
+ {
1596
+ "id": 28,
1597
+ "key": "PLAT-13",
1598
+ "projectId": 1,
1599
+ "issueTypeId": 2,
1600
+ "summary": "GraphQL API layer for mobile clients",
1601
+ "description": {
1602
+ "type": "doc",
1603
+ "version": 1,
1604
+ "content": [
1605
+ {
1606
+ "type": "paragraph",
1607
+ "content": [
1608
+ {
1609
+ "type": "text",
1610
+ "text": "Add a GraphQL endpoint that wraps existing REST APIs. Mobile team needs this for efficient data fetching."
1611
+ }
1612
+ ]
1613
+ }
1614
+ ]
1615
+ },
1616
+ "statusId": 1,
1617
+ "priorityId": 2,
1618
+ "assigneeAccountId": null,
1619
+ "reporterAccountId": "5b10ac8d82e05b22cc7d4ef5",
1620
+ "labels": [
1621
+ "platform",
1622
+ "api"
1623
+ ],
1624
+ "componentIds": [],
1625
+ "fixVersionIds": [],
1626
+ "parentKey": null,
1627
+ "storyPoints": 13,
1628
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-13",
1629
+ "resolution": null,
1630
+ "resolutionDate": null,
1631
+ "createdAt": "2024-06-20T09:00:00.000Z",
1632
+ "updatedAt": "2024-06-20T09:00:00.000Z"
1633
+ },
1634
+ {
1635
+ "id": 29,
1636
+ "key": "OPS-8",
1637
+ "projectId": 3,
1638
+ "issueTypeId": 12,
1639
+ "summary": "Configure Vault namespaces per environment",
1640
+ "description": {
1641
+ "type": "doc",
1642
+ "version": 1,
1643
+ "content": [
1644
+ {
1645
+ "type": "paragraph",
1646
+ "content": [
1647
+ {
1648
+ "type": "text",
1649
+ "text": "Set up separate Vault namespaces for dev, staging, and production environments."
1650
+ }
1651
+ ]
1652
+ }
1653
+ ]
1654
+ },
1655
+ "statusId": 8,
1656
+ "priorityId": 3,
1657
+ "assigneeAccountId": null,
1658
+ "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
1659
+ "labels": [
1660
+ "infra",
1661
+ "vault"
1662
+ ],
1663
+ "componentIds": [],
1664
+ "fixVersionIds": [],
1665
+ "parentKey": "OPS-3",
1666
+ "storyPoints": 3,
1667
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-8",
1668
+ "resolution": null,
1669
+ "resolutionDate": null,
1670
+ "createdAt": "2024-06-05T09:00:00.000Z",
1671
+ "updatedAt": "2024-06-05T09:00:00.000Z"
1672
+ },
1673
+ {
1674
+ "id": 30,
1675
+ "key": "OPS-9",
1676
+ "projectId": 3,
1677
+ "issueTypeId": 9,
1678
+ "summary": "Log aggregation with OpenSearch",
1679
+ "description": {
1680
+ "type": "doc",
1681
+ "version": 1,
1682
+ "content": [
1683
+ {
1684
+ "type": "paragraph",
1685
+ "content": [
1686
+ {
1687
+ "type": "text",
1688
+ "text": "Set up OpenSearch for centralized log aggregation. Configure Fluentd daemonsets on all K8s nodes."
1689
+ }
1690
+ ]
1691
+ }
1692
+ ]
1693
+ },
1694
+ "statusId": 8,
1695
+ "priorityId": 4,
1696
+ "assigneeAccountId": null,
1697
+ "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
1698
+ "labels": [
1699
+ "infra",
1700
+ "logging"
1701
+ ],
1702
+ "componentIds": [],
1703
+ "fixVersionIds": [],
1704
+ "parentKey": null,
1705
+ "storyPoints": 8,
1706
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-9",
1707
+ "resolution": null,
1708
+ "resolutionDate": null,
1709
+ "createdAt": "2024-06-08T09:00:00.000Z",
1710
+ "updatedAt": "2024-06-08T09:00:00.000Z"
1711
+ }
1712
+ ],
1713
+ "comments": [
1714
+ {
1715
+ "id": 1,
1716
+ "issueId": 4,
1717
+ "authorAccountId": "5b10a2844c20165700ede21g",
1718
+ "updateAuthorAccountId": "5b10a2844c20165700ede21g",
1719
+ "body": {
1720
+ "type": "doc",
1721
+ "version": 1,
1722
+ "content": [
1723
+ {
1724
+ "type": "paragraph",
1725
+ "content": [
1726
+ {
1727
+ "type": "text",
1728
+ "text": "I can reproduce this consistently. The leak appears to be in the prepared statement cache \u2014 statements aren't being evicted when connections return to the pool."
1729
+ }
1730
+ ]
1731
+ }
1732
+ ]
1733
+ },
1734
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-4/comment/10000",
1735
+ "createdAt": "2024-06-11T09:00:00.000Z",
1736
+ "updatedAt": "2024-06-11T09:00:00.000Z"
1737
+ },
1738
+ {
1739
+ "id": 2,
1740
+ "issueId": 4,
1741
+ "authorAccountId": "5b10f2c482e05b22cc7d9a01",
1742
+ "updateAuthorAccountId": "5b10f2c482e05b22cc7d9a01",
1743
+ "body": {
1744
+ "type": "doc",
1745
+ "version": 1,
1746
+ "content": [
1747
+ {
1748
+ "type": "paragraph",
1749
+ "content": [
1750
+ {
1751
+ "type": "text",
1752
+ "text": "This may be related to the pg driver upgrade in PLAT-5. The new driver changed how prepared statement handles are managed. Let me check the release notes."
1753
+ }
1754
+ ]
1755
+ }
1756
+ ]
1757
+ },
1758
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-4/comment/10001",
1759
+ "createdAt": "2024-06-11T11:30:00.000Z",
1760
+ "updatedAt": "2024-06-11T11:30:00.000Z"
1761
+ },
1762
+ {
1763
+ "id": 3,
1764
+ "issueId": 2,
1765
+ "authorAccountId": "5b10d3a482e05b22cc7d8b02",
1766
+ "updateAuthorAccountId": "5b10d3a482e05b22cc7d8b02",
1767
+ "body": {
1768
+ "type": "doc",
1769
+ "version": 1,
1770
+ "content": [
1771
+ {
1772
+ "type": "paragraph",
1773
+ "content": [
1774
+ {
1775
+ "type": "text",
1776
+ "text": "PR is up for review. I've added both user token and service account token validation. Need someone from the platform team to verify the scope hierarchy."
1777
+ }
1778
+ ]
1779
+ }
1780
+ ]
1781
+ },
1782
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-2/comment/10002",
1783
+ "createdAt": "2024-06-17T15:00:00.000Z",
1784
+ "updatedAt": "2024-06-17T15:00:00.000Z"
1785
+ },
1786
+ {
1787
+ "id": 4,
1788
+ "issueId": 13,
1789
+ "authorAccountId": "5b10e5b682e05b22cc7d7c03",
1790
+ "updateAuthorAccountId": "5b10e5b682e05b22cc7d7c03",
1791
+ "body": {
1792
+ "type": "doc",
1793
+ "version": 1,
1794
+ "content": [
1795
+ {
1796
+ "type": "paragraph",
1797
+ "content": [
1798
+ {
1799
+ "type": "text",
1800
+ "text": "Found it \u2014 the test database container has max_connections=100 but we're running 8 parallel test suites each opening 15 connections. Increasing to 200 and adding connection timeouts."
1801
+ }
1802
+ ]
1803
+ }
1804
+ ]
1805
+ },
1806
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-2/comment/10003",
1807
+ "createdAt": "2024-06-19T14:00:00.000Z",
1808
+ "updatedAt": "2024-06-19T14:00:00.000Z"
1809
+ },
1810
+ {
1811
+ "id": 5,
1812
+ "issueId": 15,
1813
+ "authorAccountId": "5b10a2844c20165700ede21g",
1814
+ "updateAuthorAccountId": "5b10a2844c20165700ede21g",
1815
+ "body": {
1816
+ "type": "doc",
1817
+ "version": 1,
1818
+ "content": [
1819
+ {
1820
+ "type": "paragraph",
1821
+ "content": [
1822
+ {
1823
+ "type": "text",
1824
+ "text": "Make sure to cover both user token and service account token edge cases in the tests."
1825
+ }
1826
+ ]
1827
+ }
1828
+ ]
1829
+ },
1830
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-8/comment/10004",
1831
+ "createdAt": "2024-06-16T09:00:00.000Z",
1832
+ "updatedAt": "2024-06-16T09:00:00.000Z"
1833
+ },
1834
+ {
1835
+ "id": 6,
1836
+ "issueId": 10,
1837
+ "authorAccountId": "5b10ac8d82e05b22cc7d4ef5",
1838
+ "updateAuthorAccountId": "5b10ac8d82e05b22cc7d4ef5",
1839
+ "body": {
1840
+ "type": "doc",
1841
+ "version": 1,
1842
+ "content": [
1843
+ {
1844
+ "type": "paragraph",
1845
+ "content": [
1846
+ {
1847
+ "type": "text",
1848
+ "text": "Confirmed crash on Pixel 7 running Android 13. Stack trace attached. Workaround: explicit intent instead of implicit."
1849
+ }
1850
+ ]
1851
+ }
1852
+ ]
1853
+ },
1854
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/MOBILE-3/comment/10005",
1855
+ "createdAt": "2024-06-18T16:00:00.000Z",
1856
+ "updatedAt": "2024-06-18T16:00:00.000Z"
1857
+ },
1858
+ {
1859
+ "id": 7,
1860
+ "issueId": 22,
1861
+ "authorAccountId": "5b10ac8d82e05b22cc7d4ef5",
1862
+ "updateAuthorAccountId": "5b10ac8d82e05b22cc7d4ef5",
1863
+ "body": {
1864
+ "type": "doc",
1865
+ "version": 1,
1866
+ "content": [
1867
+ {
1868
+ "type": "paragraph",
1869
+ "content": [
1870
+ {
1871
+ "type": "text",
1872
+ "text": "Root cause: APNs environment mismatch after app store update. Production cert was referencing sandbox endpoint."
1873
+ }
1874
+ ]
1875
+ }
1876
+ ]
1877
+ },
1878
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/MOBILE-7/comment/10006",
1879
+ "createdAt": "2024-06-08T10:00:00.000Z",
1880
+ "updatedAt": "2024-06-08T10:00:00.000Z"
1881
+ },
1882
+ {
1883
+ "id": 8,
1884
+ "issueId": 24,
1885
+ "authorAccountId": "5b10f2c482e05b22cc7d9a01",
1886
+ "updateAuthorAccountId": "5b10f2c482e05b22cc7d9a01",
1887
+ "body": {
1888
+ "type": "doc",
1889
+ "version": 1,
1890
+ "content": [
1891
+ {
1892
+ "type": "paragraph",
1893
+ "content": [
1894
+ {
1895
+ "type": "text",
1896
+ "text": "Using Grafana Cloud for this. Prometheus metrics already being scraped. Need to create dashboard JSON."
1897
+ }
1898
+ ]
1899
+ }
1900
+ ]
1901
+ },
1902
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-4/comment/10007",
1903
+ "createdAt": "2024-06-16T14:00:00.000Z",
1904
+ "updatedAt": "2024-06-16T14:00:00.000Z"
1905
+ },
1906
+ {
1907
+ "id": 9,
1908
+ "issueId": 19,
1909
+ "authorAccountId": "5b10d3a482e05b22cc7d8b02",
1910
+ "updateAuthorAccountId": "5b10d3a482e05b22cc7d8b02",
1911
+ "body": {
1912
+ "type": "doc",
1913
+ "version": 1,
1914
+ "content": [
1915
+ {
1916
+ "type": "paragraph",
1917
+ "content": [
1918
+ {
1919
+ "type": "text",
1920
+ "text": "Should we use Redis Cluster or Redis Sentinel? Cluster gives us better scaling but more complexity."
1921
+ }
1922
+ ]
1923
+ }
1924
+ ]
1925
+ },
1926
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-12/comment/10008",
1927
+ "createdAt": "2024-06-20T10:00:00.000Z",
1928
+ "updatedAt": "2024-06-20T10:00:00.000Z"
1929
+ },
1930
+ {
1931
+ "id": 10,
1932
+ "issueId": 19,
1933
+ "authorAccountId": "5b10a2844c20165700ede21g",
1934
+ "updateAuthorAccountId": "5b10a2844c20165700ede21g",
1935
+ "body": {
1936
+ "type": "doc",
1937
+ "version": 1,
1938
+ "content": [
1939
+ {
1940
+ "type": "paragraph",
1941
+ "content": [
1942
+ {
1943
+ "type": "text",
1944
+ "text": "Start with Sentinel. We can migrate to Cluster when we actually need the throughput."
1945
+ }
1946
+ ]
1947
+ }
1948
+ ]
1949
+ },
1950
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-12/comment/10009",
1951
+ "createdAt": "2024-06-20T11:00:00.000Z",
1952
+ "updatedAt": "2024-06-20T11:00:00.000Z"
1953
+ },
1954
+ {
1955
+ "id": 11,
1956
+ "issueId": 26,
1957
+ "authorAccountId": "5b10f2c482e05b22cc7d9a01",
1958
+ "updateAuthorAccountId": "5b10f2c482e05b22cc7d9a01",
1959
+ "body": {
1960
+ "type": "doc",
1961
+ "version": 1,
1962
+ "content": [
1963
+ {
1964
+ "type": "paragraph",
1965
+ "content": [
1966
+ {
1967
+ "type": "text",
1968
+ "text": "Fixed by running terraform init -upgrade. Lock file was pinned to an old provider version."
1969
+ }
1970
+ ]
1971
+ }
1972
+ ]
1973
+ },
1974
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-6/comment/10010",
1975
+ "createdAt": "2024-06-05T10:00:00.000Z",
1976
+ "updatedAt": "2024-06-05T10:00:00.000Z"
1977
+ }
1978
+ ],
1979
+ "transitions": [
1980
+ {
1981
+ "id": 1,
1982
+ "name": "Start Progress",
1983
+ "toStatusId": 2,
1984
+ "projectId": 1,
1985
+ "fromStatusIds": [
1986
+ 1
1987
+ ],
1988
+ "createdAt": "2023-01-15T00:00:00.000Z",
1989
+ "updatedAt": "2023-01-15T00:00:00.000Z"
1990
+ },
1991
+ {
1992
+ "id": 2,
1993
+ "name": "Request Review",
1994
+ "toStatusId": 3,
1995
+ "projectId": 1,
1996
+ "fromStatusIds": [
1997
+ 2
1998
+ ],
1999
+ "createdAt": "2023-01-15T00:00:00.000Z",
2000
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2001
+ },
2002
+ {
2003
+ "id": 3,
2004
+ "name": "Done",
2005
+ "toStatusId": 4,
2006
+ "projectId": 1,
2007
+ "fromStatusIds": [
2008
+ 2,
2009
+ 3
2010
+ ],
2011
+ "createdAt": "2023-01-15T00:00:00.000Z",
2012
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2013
+ },
2014
+ {
2015
+ "id": 4,
2016
+ "name": "Reopen",
2017
+ "toStatusId": 1,
2018
+ "projectId": 1,
2019
+ "fromStatusIds": [
2020
+ 2,
2021
+ 3,
2022
+ 4
2023
+ ],
2024
+ "createdAt": "2023-01-15T00:00:00.000Z",
2025
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2026
+ },
2027
+ {
2028
+ "id": 5,
2029
+ "name": "Back to In Progress",
2030
+ "toStatusId": 2,
2031
+ "projectId": 1,
2032
+ "fromStatusIds": [
2033
+ 3
2034
+ ],
2035
+ "createdAt": "2023-01-15T00:00:00.000Z",
2036
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2037
+ },
2038
+ {
2039
+ "id": 6,
2040
+ "name": "Start Progress",
2041
+ "toStatusId": 6,
2042
+ "projectId": 2,
2043
+ "fromStatusIds": [
2044
+ 5
2045
+ ],
2046
+ "createdAt": "2023-06-01T00:00:00.000Z",
2047
+ "updatedAt": "2023-06-01T00:00:00.000Z"
2048
+ },
2049
+ {
2050
+ "id": 7,
2051
+ "name": "Done",
2052
+ "toStatusId": 7,
2053
+ "projectId": 2,
2054
+ "fromStatusIds": [
2055
+ 5,
2056
+ 6
2057
+ ],
2058
+ "createdAt": "2023-06-01T00:00:00.000Z",
2059
+ "updatedAt": "2023-06-01T00:00:00.000Z"
2060
+ },
2061
+ {
2062
+ "id": 8,
2063
+ "name": "Reopen",
2064
+ "toStatusId": 5,
2065
+ "projectId": 2,
2066
+ "fromStatusIds": [
2067
+ 6,
2068
+ 7
2069
+ ],
2070
+ "createdAt": "2023-06-01T00:00:00.000Z",
2071
+ "updatedAt": "2023-06-01T00:00:00.000Z"
2072
+ },
2073
+ {
2074
+ "id": 9,
2075
+ "name": "Start Progress",
2076
+ "toStatusId": 9,
2077
+ "projectId": 3,
2078
+ "fromStatusIds": [
2079
+ 8
2080
+ ],
2081
+ "createdAt": "2023-09-01T00:00:00.000Z",
2082
+ "updatedAt": "2023-09-01T00:00:00.000Z"
2083
+ },
2084
+ {
2085
+ "id": 10,
2086
+ "name": "Done",
2087
+ "toStatusId": 10,
2088
+ "projectId": 3,
2089
+ "fromStatusIds": [
2090
+ 8,
2091
+ 9
2092
+ ],
2093
+ "createdAt": "2023-09-01T00:00:00.000Z",
2094
+ "updatedAt": "2023-09-01T00:00:00.000Z"
2095
+ },
2096
+ {
2097
+ "id": 11,
2098
+ "name": "Reopen",
2099
+ "toStatusId": 8,
2100
+ "projectId": 3,
2101
+ "fromStatusIds": [
2102
+ 9,
2103
+ 10
2104
+ ],
2105
+ "createdAt": "2023-09-01T00:00:00.000Z",
2106
+ "updatedAt": "2023-09-01T00:00:00.000Z"
2107
+ }
2108
+ ],
2109
+ "boards": [
2110
+ {
2111
+ "id": 1,
2112
+ "name": "Platform Board",
2113
+ "type": "scrum",
2114
+ "projectId": 1,
2115
+ "self": "https://acmecorp.atlassian.net/rest/agile/1.0/board/1",
2116
+ "createdAt": "2023-01-15T00:00:00.000Z",
2117
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2118
+ },
2119
+ {
2120
+ "id": 2,
2121
+ "name": "Mobile Board",
2122
+ "type": "scrum",
2123
+ "projectId": 2,
2124
+ "self": "https://acmecorp.atlassian.net/rest/agile/1.0/board/2",
2125
+ "createdAt": "2023-06-01T00:00:00.000Z",
2126
+ "updatedAt": "2023-06-01T00:00:00.000Z"
2127
+ },
2128
+ {
2129
+ "id": 3,
2130
+ "name": "DevOps Kanban",
2131
+ "type": "kanban",
2132
+ "projectId": 3,
2133
+ "self": "https://acmecorp.atlassian.net/rest/agile/1.0/board/3",
2134
+ "createdAt": "2023-09-01T00:00:00.000Z",
2135
+ "updatedAt": "2023-09-01T00:00:00.000Z"
2136
+ }
2137
+ ],
2138
+ "sprints": [
2139
+ {
2140
+ "id": 1,
2141
+ "boardId": 1,
2142
+ "name": "PLAT Sprint 12",
2143
+ "state": "closed",
2144
+ "startDate": "2024-05-13T00:00:00.000Z",
2145
+ "endDate": "2024-05-27T00:00:00.000Z",
2146
+ "completeDate": "2024-05-27T17:00:00.000Z",
2147
+ "goal": "Complete pg driver upgrade and OTel instrumentation",
2148
+ "self": "https://acmecorp.atlassian.net/rest/agile/1.0/sprint/1",
2149
+ "createdAt": "2024-05-12T00:00:00.000Z",
2150
+ "updatedAt": "2024-05-27T17:00:00.000Z"
2151
+ },
2152
+ {
2153
+ "id": 2,
2154
+ "boardId": 1,
2155
+ "name": "PLAT Sprint 13",
2156
+ "state": "active",
2157
+ "startDate": "2024-06-10T00:00:00.000Z",
2158
+ "endDate": "2024-06-24T00:00:00.000Z",
2159
+ "completeDate": null,
2160
+ "goal": "API Gateway v2: OAuth2 scopes and rate limiting",
2161
+ "self": "https://acmecorp.atlassian.net/rest/agile/1.0/sprint/2",
2162
+ "createdAt": "2024-06-09T00:00:00.000Z",
2163
+ "updatedAt": "2024-06-10T00:00:00.000Z"
2164
+ },
2165
+ {
2166
+ "id": 3,
2167
+ "boardId": 1,
2168
+ "name": "PLAT Sprint 14",
2169
+ "state": "future",
2170
+ "startDate": null,
2171
+ "endDate": null,
2172
+ "completeDate": null,
2173
+ "goal": "API Gateway v2: request transformation",
2174
+ "self": "https://acmecorp.atlassian.net/rest/agile/1.0/sprint/3",
2175
+ "createdAt": "2024-06-20T00:00:00.000Z",
2176
+ "updatedAt": "2024-06-20T00:00:00.000Z"
2177
+ },
2178
+ {
2179
+ "id": 4,
2180
+ "boardId": 2,
2181
+ "name": "Mobile Sprint 8",
2182
+ "state": "active",
2183
+ "startDate": "2024-06-10T00:00:00.000Z",
2184
+ "endDate": "2024-06-24T00:00:00.000Z",
2185
+ "completeDate": null,
2186
+ "goal": "Push notification action buttons and Android 13 fix",
2187
+ "self": "https://acmecorp.atlassian.net/rest/agile/1.0/sprint/4",
2188
+ "createdAt": "2024-06-09T00:00:00.000Z",
2189
+ "updatedAt": "2024-06-10T00:00:00.000Z"
2190
+ }
2191
+ ],
2192
+ "sprintIssues": [
2193
+ {
2194
+ "id": 1,
2195
+ "sprintId": 1,
2196
+ "issueId": 5,
2197
+ "createdAt": "2024-05-13T00:00:00.000Z",
2198
+ "updatedAt": "2024-05-13T00:00:00.000Z"
2199
+ },
2200
+ {
2201
+ "id": 2,
2202
+ "sprintId": 1,
2203
+ "issueId": 6,
2204
+ "createdAt": "2024-05-13T00:00:00.000Z",
2205
+ "updatedAt": "2024-05-13T00:00:00.000Z"
2206
+ },
2207
+ {
2208
+ "id": 3,
2209
+ "sprintId": 2,
2210
+ "issueId": 2,
2211
+ "createdAt": "2024-06-10T00:00:00.000Z",
2212
+ "updatedAt": "2024-06-10T00:00:00.000Z"
2213
+ },
2214
+ {
2215
+ "id": 4,
2216
+ "sprintId": 2,
2217
+ "issueId": 3,
2218
+ "createdAt": "2024-06-10T00:00:00.000Z",
2219
+ "updatedAt": "2024-06-10T00:00:00.000Z"
2220
+ },
2221
+ {
2222
+ "id": 5,
2223
+ "sprintId": 2,
2224
+ "issueId": 4,
2225
+ "createdAt": "2024-06-10T00:00:00.000Z",
2226
+ "updatedAt": "2024-06-10T00:00:00.000Z"
2227
+ },
2228
+ {
2229
+ "id": 6,
2230
+ "sprintId": 3,
2231
+ "issueId": 7,
2232
+ "createdAt": "2024-06-20T00:00:00.000Z",
2233
+ "updatedAt": "2024-06-20T00:00:00.000Z"
2234
+ },
2235
+ {
2236
+ "id": 7,
2237
+ "sprintId": 4,
2238
+ "issueId": 10,
2239
+ "createdAt": "2024-06-10T00:00:00.000Z",
2240
+ "updatedAt": "2024-06-10T00:00:00.000Z"
2241
+ },
2242
+ {
2243
+ "id": 8,
2244
+ "sprintId": 4,
2245
+ "issueId": 11,
2246
+ "createdAt": "2024-06-10T00:00:00.000Z",
2247
+ "updatedAt": "2024-06-10T00:00:00.000Z"
2248
+ }
2249
+ ],
2250
+ "worklogs": [
2251
+ {
2252
+ "id": 1,
2253
+ "issueId": 5,
2254
+ "authorAccountId": "5b10f2c482e05b22cc7d9a01",
2255
+ "updateAuthorAccountId": "5b10f2c482e05b22cc7d9a01",
2256
+ "comment": {
2257
+ "type": "doc",
2258
+ "version": 1,
2259
+ "content": [
2260
+ {
2261
+ "type": "paragraph",
2262
+ "content": [
2263
+ {
2264
+ "type": "text",
2265
+ "text": "Investigated breaking changes in pg v5, created migration checklist."
2266
+ }
2267
+ ]
2268
+ }
2269
+ ]
2270
+ },
2271
+ "started": "2024-05-14T09:00:00.000Z",
2272
+ "timeSpent": "3h",
2273
+ "timeSpentSeconds": 10800,
2274
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-5/worklog/10000",
2275
+ "createdAt": "2024-05-14T17:00:00.000Z",
2276
+ "updatedAt": "2024-05-14T17:00:00.000Z"
2277
+ },
2278
+ {
2279
+ "id": 2,
2280
+ "issueId": 5,
2281
+ "authorAccountId": "5b10f2c482e05b22cc7d9a01",
2282
+ "updateAuthorAccountId": "5b10f2c482e05b22cc7d9a01",
2283
+ "comment": {
2284
+ "type": "doc",
2285
+ "version": 1,
2286
+ "content": [
2287
+ {
2288
+ "type": "paragraph",
2289
+ "content": [
2290
+ {
2291
+ "type": "text",
2292
+ "text": "Updated all connection strings and pool configs. Ran full regression suite."
2293
+ }
2294
+ ]
2295
+ }
2296
+ ]
2297
+ },
2298
+ "started": "2024-05-20T09:00:00.000Z",
2299
+ "timeSpent": "6h",
2300
+ "timeSpentSeconds": 21600,
2301
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-5/worklog/10001",
2302
+ "createdAt": "2024-05-20T17:00:00.000Z",
2303
+ "updatedAt": "2024-05-20T17:00:00.000Z"
2304
+ },
2305
+ {
2306
+ "id": 3,
2307
+ "issueId": 2,
2308
+ "authorAccountId": "5b10d3a482e05b22cc7d8b02",
2309
+ "updateAuthorAccountId": "5b10d3a482e05b22cc7d8b02",
2310
+ "comment": {
2311
+ "type": "doc",
2312
+ "version": 1,
2313
+ "content": [
2314
+ {
2315
+ "type": "paragraph",
2316
+ "content": [
2317
+ {
2318
+ "type": "text",
2319
+ "text": "Implemented scope validation for user tokens. Service account tokens next."
2320
+ }
2321
+ ]
2322
+ }
2323
+ ]
2324
+ },
2325
+ "started": "2024-06-12T09:00:00.000Z",
2326
+ "timeSpent": "4h",
2327
+ "timeSpentSeconds": 14400,
2328
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-2/worklog/10002",
2329
+ "createdAt": "2024-06-12T17:00:00.000Z",
2330
+ "updatedAt": "2024-06-12T17:00:00.000Z"
2331
+ },
2332
+ {
2333
+ "id": 4,
2334
+ "issueId": 12,
2335
+ "authorAccountId": "5b10f2c482e05b22cc7d9a01",
2336
+ "updateAuthorAccountId": "5b10f2c482e05b22cc7d9a01",
2337
+ "comment": {
2338
+ "type": "doc",
2339
+ "version": 1,
2340
+ "content": [
2341
+ {
2342
+ "type": "paragraph",
2343
+ "content": [
2344
+ {
2345
+ "type": "text",
2346
+ "text": "Configured HPA and tested with load simulation."
2347
+ }
2348
+ ]
2349
+ }
2350
+ ]
2351
+ },
2352
+ "started": "2024-04-15T09:00:00.000Z",
2353
+ "timeSpent": "4h",
2354
+ "timeSpentSeconds": 14400,
2355
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/OPS-1/worklog/10003",
2356
+ "createdAt": "2024-04-15T17:00:00.000Z",
2357
+ "updatedAt": "2024-04-15T17:00:00.000Z"
2358
+ },
2359
+ {
2360
+ "id": 5,
2361
+ "issueId": 22,
2362
+ "authorAccountId": "5b10ac8d82e05b22cc7d4ef5",
2363
+ "updateAuthorAccountId": "5b10ac8d82e05b22cc7d4ef5",
2364
+ "comment": {
2365
+ "type": "doc",
2366
+ "version": 1,
2367
+ "content": [
2368
+ {
2369
+ "type": "paragraph",
2370
+ "content": [
2371
+ {
2372
+ "type": "text",
2373
+ "text": "Investigated APNs configuration and fixed certificate environment mismatch."
2374
+ }
2375
+ ]
2376
+ }
2377
+ ]
2378
+ },
2379
+ "started": "2024-06-09T09:00:00.000Z",
2380
+ "timeSpent": "3h",
2381
+ "timeSpentSeconds": 10800,
2382
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/MOBILE-7/worklog/10004",
2383
+ "createdAt": "2024-06-09T17:00:00.000Z",
2384
+ "updatedAt": "2024-06-09T17:00:00.000Z"
2385
+ },
2386
+ {
2387
+ "id": 6,
2388
+ "issueId": 18,
2389
+ "authorAccountId": "5b10a2844c20165700ede21g",
2390
+ "updateAuthorAccountId": "5b10a2844c20165700ede21g",
2391
+ "comment": {
2392
+ "type": "doc",
2393
+ "version": 1,
2394
+ "content": [
2395
+ {
2396
+ "type": "paragraph",
2397
+ "content": [
2398
+ {
2399
+ "type": "text",
2400
+ "text": "Fixed CORS headers and added regression tests."
2401
+ }
2402
+ ]
2403
+ }
2404
+ ]
2405
+ },
2406
+ "started": "2024-05-19T09:00:00.000Z",
2407
+ "timeSpent": "2h",
2408
+ "timeSpentSeconds": 7200,
2409
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issue/PLAT-11/worklog/10005",
2410
+ "createdAt": "2024-05-19T17:00:00.000Z",
2411
+ "updatedAt": "2024-05-19T17:00:00.000Z"
2412
+ }
2413
+ ],
2414
+ "components": [
2415
+ {
2416
+ "id": 1,
2417
+ "name": "API Gateway",
2418
+ "description": "API gateway and routing layer",
2419
+ "projectId": 1,
2420
+ "leadAccountId": "5b10a2844c20165700ede21g",
2421
+ "self": "https://acmecorp.atlassian.net/rest/api/3/component/10000",
2422
+ "createdAt": "2023-01-15T00:00:00.000Z",
2423
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2424
+ },
2425
+ {
2426
+ "id": 2,
2427
+ "name": "Auth Service",
2428
+ "description": "Authentication and authorization service",
2429
+ "projectId": 1,
2430
+ "leadAccountId": "5b10d3a482e05b22cc7d8b02",
2431
+ "self": "https://acmecorp.atlassian.net/rest/api/3/component/10001",
2432
+ "createdAt": "2023-01-15T00:00:00.000Z",
2433
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2434
+ },
2435
+ {
2436
+ "id": 3,
2437
+ "name": "Database",
2438
+ "description": "Database layer and migrations",
2439
+ "projectId": 1,
2440
+ "leadAccountId": "5b10f2c482e05b22cc7d9a01",
2441
+ "self": "https://acmecorp.atlassian.net/rest/api/3/component/10002",
2442
+ "createdAt": "2023-01-15T00:00:00.000Z",
2443
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2444
+ },
2445
+ {
2446
+ "id": 4,
2447
+ "name": "iOS",
2448
+ "description": "iOS native code",
2449
+ "projectId": 2,
2450
+ "leadAccountId": "5b10ac8d82e05b22cc7d4ef5",
2451
+ "self": "https://acmecorp.atlassian.net/rest/api/3/component/10003",
2452
+ "createdAt": "2023-06-01T00:00:00.000Z",
2453
+ "updatedAt": "2023-06-01T00:00:00.000Z"
2454
+ },
2455
+ {
2456
+ "id": 5,
2457
+ "name": "Android",
2458
+ "description": "Android native code",
2459
+ "projectId": 2,
2460
+ "leadAccountId": null,
2461
+ "self": "https://acmecorp.atlassian.net/rest/api/3/component/10004",
2462
+ "createdAt": "2023-06-01T00:00:00.000Z",
2463
+ "updatedAt": "2023-06-01T00:00:00.000Z"
2464
+ }
2465
+ ],
2466
+ "versions": [
2467
+ {
2468
+ "id": 1,
2469
+ "projectId": 1,
2470
+ "name": "v2.0",
2471
+ "description": "API Gateway v2 release",
2472
+ "archived": false,
2473
+ "released": false,
2474
+ "startDate": "2024-01-15",
2475
+ "releaseDate": "2024-08-01",
2476
+ "self": "https://acmecorp.atlassian.net/rest/api/3/version/10000",
2477
+ "createdAt": "2024-01-15T00:00:00.000Z",
2478
+ "updatedAt": "2024-01-15T00:00:00.000Z"
2479
+ },
2480
+ {
2481
+ "id": 2,
2482
+ "projectId": 1,
2483
+ "name": "v1.9",
2484
+ "description": "Maintenance release \u2014 driver upgrades and observability",
2485
+ "archived": false,
2486
+ "released": true,
2487
+ "startDate": "2024-04-01",
2488
+ "releaseDate": "2024-06-01",
2489
+ "self": "https://acmecorp.atlassian.net/rest/api/3/version/10001",
2490
+ "createdAt": "2024-04-01T00:00:00.000Z",
2491
+ "updatedAt": "2024-06-01T00:00:00.000Z"
2492
+ },
2493
+ {
2494
+ "id": 3,
2495
+ "projectId": 2,
2496
+ "name": "v3.0",
2497
+ "description": "Push notification overhaul",
2498
+ "archived": false,
2499
+ "released": false,
2500
+ "startDate": "2024-04-01",
2501
+ "releaseDate": "2024-07-15",
2502
+ "self": "https://acmecorp.atlassian.net/rest/api/3/version/10002",
2503
+ "createdAt": "2024-04-01T00:00:00.000Z",
2504
+ "updatedAt": "2024-04-01T00:00:00.000Z"
2505
+ }
2506
+ ],
2507
+ "issueLinks": [
2508
+ {
2509
+ "id": 1,
2510
+ "inwardIssueId": 4,
2511
+ "outwardIssueId": 2,
2512
+ "linkTypeName": "Blocks",
2513
+ "linkTypeInward": "is blocked by",
2514
+ "linkTypeOutward": "blocks",
2515
+ "createdAt": "2024-06-11T10:00:00.000Z",
2516
+ "updatedAt": "2024-06-11T10:00:00.000Z"
2517
+ },
2518
+ {
2519
+ "id": 2,
2520
+ "inwardIssueId": 4,
2521
+ "outwardIssueId": 5,
2522
+ "linkTypeName": "Relates",
2523
+ "linkTypeInward": "relates to",
2524
+ "linkTypeOutward": "relates to",
2525
+ "createdAt": "2024-06-11T10:00:00.000Z",
2526
+ "updatedAt": "2024-06-11T10:00:00.000Z"
2527
+ },
2528
+ {
2529
+ "id": 3,
2530
+ "inwardIssueId": 10,
2531
+ "outwardIssueId": 9,
2532
+ "linkTypeName": "Blocks",
2533
+ "linkTypeInward": "is blocked by",
2534
+ "linkTypeOutward": "blocks",
2535
+ "createdAt": "2024-06-18T14:30:00.000Z",
2536
+ "updatedAt": "2024-06-18T14:30:00.000Z"
2537
+ },
2538
+ {
2539
+ "id": 4,
2540
+ "inwardIssueId": 22,
2541
+ "outwardIssueId": 10,
2542
+ "linkTypeName": "Duplicates",
2543
+ "linkTypeInward": "is duplicated by",
2544
+ "linkTypeOutward": "duplicates",
2545
+ "createdAt": "2024-06-05T10:00:00.000Z",
2546
+ "updatedAt": "2024-06-05T10:00:00.000Z"
2547
+ },
2548
+ {
2549
+ "id": 5,
2550
+ "inwardIssueId": 27,
2551
+ "outwardIssueId": 14,
2552
+ "linkTypeName": "Clones",
2553
+ "linkTypeInward": "is cloned by",
2554
+ "linkTypeOutward": "clones",
2555
+ "createdAt": "2024-06-10T09:00:00.000Z",
2556
+ "updatedAt": "2024-06-10T09:00:00.000Z"
2557
+ },
2558
+ {
2559
+ "id": 6,
2560
+ "inwardIssueId": 19,
2561
+ "outwardIssueId": 2,
2562
+ "linkTypeName": "Relates",
2563
+ "linkTypeInward": "relates to",
2564
+ "linkTypeOutward": "relates to",
2565
+ "createdAt": "2024-06-20T10:00:00.000Z",
2566
+ "updatedAt": "2024-06-20T10:00:00.000Z"
2567
+ }
2568
+ ],
2569
+ "issueLinkTypes": [
2570
+ {
2571
+ "id": 1,
2572
+ "name": "Blocks",
2573
+ "inward": "is blocked by",
2574
+ "outward": "blocks",
2575
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issueLinkType/10000",
2576
+ "createdAt": "2023-01-15T00:00:00.000Z",
2577
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2578
+ },
2579
+ {
2580
+ "id": 2,
2581
+ "name": "Relates",
2582
+ "inward": "relates to",
2583
+ "outward": "relates to",
2584
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issueLinkType/10001",
2585
+ "createdAt": "2023-01-15T00:00:00.000Z",
2586
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2587
+ },
2588
+ {
2589
+ "id": 3,
2590
+ "name": "Duplicates",
2591
+ "inward": "is duplicated by",
2592
+ "outward": "duplicates",
2593
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issueLinkType/10002",
2594
+ "createdAt": "2023-01-15T00:00:00.000Z",
2595
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2596
+ },
2597
+ {
2598
+ "id": 4,
2599
+ "name": "Clones",
2600
+ "inward": "is cloned by",
2601
+ "outward": "clones",
2602
+ "self": "https://acmecorp.atlassian.net/rest/api/3/issueLinkType/10003",
2603
+ "createdAt": "2023-01-15T00:00:00.000Z",
2604
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2605
+ }
2606
+ ],
2607
+ "fields": [
2608
+ {
2609
+ "id": 1,
2610
+ "fieldId": "summary",
2611
+ "name": "Summary",
2612
+ "custom": false,
2613
+ "orderable": true,
2614
+ "navigable": true,
2615
+ "searchable": true,
2616
+ "clauseNames": [
2617
+ "summary"
2618
+ ],
2619
+ "schema": {
2620
+ "type": "string",
2621
+ "system": "summary"
2622
+ },
2623
+ "createdAt": "2023-01-15T00:00:00.000Z",
2624
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2625
+ },
2626
+ {
2627
+ "id": 2,
2628
+ "fieldId": "description",
2629
+ "name": "Description",
2630
+ "custom": false,
2631
+ "orderable": true,
2632
+ "navigable": true,
2633
+ "searchable": true,
2634
+ "clauseNames": [
2635
+ "description"
2636
+ ],
2637
+ "schema": {
2638
+ "type": "string",
2639
+ "system": "description"
2640
+ },
2641
+ "createdAt": "2023-01-15T00:00:00.000Z",
2642
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2643
+ },
2644
+ {
2645
+ "id": 3,
2646
+ "fieldId": "status",
2647
+ "name": "Status",
2648
+ "custom": false,
2649
+ "orderable": true,
2650
+ "navigable": true,
2651
+ "searchable": true,
2652
+ "clauseNames": [
2653
+ "status"
2654
+ ],
2655
+ "schema": {
2656
+ "type": "status",
2657
+ "system": "status"
2658
+ },
2659
+ "createdAt": "2023-01-15T00:00:00.000Z",
2660
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2661
+ },
2662
+ {
2663
+ "id": 4,
2664
+ "fieldId": "assignee",
2665
+ "name": "Assignee",
2666
+ "custom": false,
2667
+ "orderable": true,
2668
+ "navigable": true,
2669
+ "searchable": true,
2670
+ "clauseNames": [
2671
+ "assignee"
2672
+ ],
2673
+ "schema": {
2674
+ "type": "user",
2675
+ "system": "assignee"
2676
+ },
2677
+ "createdAt": "2023-01-15T00:00:00.000Z",
2678
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2679
+ },
2680
+ {
2681
+ "id": 5,
2682
+ "fieldId": "reporter",
2683
+ "name": "Reporter",
2684
+ "custom": false,
2685
+ "orderable": true,
2686
+ "navigable": true,
2687
+ "searchable": true,
2688
+ "clauseNames": [
2689
+ "reporter"
2690
+ ],
2691
+ "schema": {
2692
+ "type": "user",
2693
+ "system": "reporter"
2694
+ },
2695
+ "createdAt": "2023-01-15T00:00:00.000Z",
2696
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2697
+ },
2698
+ {
2699
+ "id": 6,
2700
+ "fieldId": "priority",
2701
+ "name": "Priority",
2702
+ "custom": false,
2703
+ "orderable": true,
2704
+ "navigable": true,
2705
+ "searchable": true,
2706
+ "clauseNames": [
2707
+ "priority"
2708
+ ],
2709
+ "schema": {
2710
+ "type": "priority",
2711
+ "system": "priority"
2712
+ },
2713
+ "createdAt": "2023-01-15T00:00:00.000Z",
2714
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2715
+ },
2716
+ {
2717
+ "id": 7,
2718
+ "fieldId": "issuetype",
2719
+ "name": "Issue Type",
2720
+ "custom": false,
2721
+ "orderable": true,
2722
+ "navigable": true,
2723
+ "searchable": true,
2724
+ "clauseNames": [
2725
+ "issuetype",
2726
+ "type"
2727
+ ],
2728
+ "schema": {
2729
+ "type": "issuetype",
2730
+ "system": "issuetype"
2731
+ },
2732
+ "createdAt": "2023-01-15T00:00:00.000Z",
2733
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2734
+ },
2735
+ {
2736
+ "id": 8,
2737
+ "fieldId": "project",
2738
+ "name": "Project",
2739
+ "custom": false,
2740
+ "orderable": true,
2741
+ "navigable": true,
2742
+ "searchable": true,
2743
+ "clauseNames": [
2744
+ "project"
2745
+ ],
2746
+ "schema": {
2747
+ "type": "project",
2748
+ "system": "project"
2749
+ },
2750
+ "createdAt": "2023-01-15T00:00:00.000Z",
2751
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2752
+ },
2753
+ {
2754
+ "id": 9,
2755
+ "fieldId": "labels",
2756
+ "name": "Labels",
2757
+ "custom": false,
2758
+ "orderable": true,
2759
+ "navigable": true,
2760
+ "searchable": true,
2761
+ "clauseNames": [
2762
+ "labels"
2763
+ ],
2764
+ "schema": {
2765
+ "type": "array",
2766
+ "system": "labels"
2767
+ },
2768
+ "createdAt": "2023-01-15T00:00:00.000Z",
2769
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2770
+ },
2771
+ {
2772
+ "id": 10,
2773
+ "fieldId": "story_points",
2774
+ "name": "Story Points",
2775
+ "custom": true,
2776
+ "orderable": true,
2777
+ "navigable": true,
2778
+ "searchable": true,
2779
+ "clauseNames": [
2780
+ "story_points",
2781
+ "cf[10016]"
2782
+ ],
2783
+ "schema": {
2784
+ "type": "number",
2785
+ "custom": "com.atlassian.jira.plugin.system.customfieldtypes:float",
2786
+ "customId": 10016
2787
+ },
2788
+ "createdAt": "2023-01-15T00:00:00.000Z",
2789
+ "updatedAt": "2023-01-15T00:00:00.000Z"
2790
+ }
2791
+ ],
2792
+ "watchers": [
2793
+ {
2794
+ "id": 1,
2795
+ "issueId": 4,
2796
+ "accountId": "5b10a2844c20165700ede21g",
2797
+ "createdAt": "2024-06-11T09:00:00.000Z",
2798
+ "updatedAt": "2024-06-11T09:00:00.000Z"
2799
+ },
2800
+ {
2801
+ "id": 2,
2802
+ "issueId": 4,
2803
+ "accountId": "5b10f2c482e05b22cc7d9a01",
2804
+ "createdAt": "2024-06-11T11:30:00.000Z",
2805
+ "updatedAt": "2024-06-11T11:30:00.000Z"
2806
+ },
2807
+ {
2808
+ "id": 3,
2809
+ "issueId": 13,
2810
+ "accountId": "5b10d3a482e05b22cc7d8b02",
2811
+ "createdAt": "2024-06-12T10:00:00.000Z",
2812
+ "updatedAt": "2024-06-12T10:00:00.000Z"
2813
+ },
2814
+ {
2815
+ "id": 4,
2816
+ "issueId": 2,
2817
+ "accountId": "5b10a2844c20165700ede21g",
2818
+ "createdAt": "2024-06-17T15:00:00.000Z",
2819
+ "updatedAt": "2024-06-17T15:00:00.000Z"
2820
+ },
2821
+ {
2822
+ "id": 5,
2823
+ "issueId": 10,
2824
+ "accountId": "5b10ac8d82e05b22cc7d4ef5",
2825
+ "createdAt": "2024-06-18T14:00:00.000Z",
2826
+ "updatedAt": "2024-06-18T14:00:00.000Z"
2827
+ },
2828
+ {
2829
+ "id": 6,
2830
+ "issueId": 19,
2831
+ "accountId": "5b10d3a482e05b22cc7d8b02",
2832
+ "createdAt": "2024-06-20T10:00:00.000Z",
2833
+ "updatedAt": "2024-06-20T10:00:00.000Z"
2834
+ }
2835
+ ],
2836
+ "remoteLinks": [],
2837
+ "dashboards": [
2838
+ {
2839
+ "id": 1,
2840
+ "dashboardId": "dash_001",
2841
+ "name": "Engineering Overview",
2842
+ "description": "High-level engineering team dashboard with velocity and burndown",
2843
+ "owner": "5b10a2844c20165700ede21g",
2844
+ "isShared": true,
2845
+ "gadgets": [
2846
+ {
2847
+ "gadgetId": "gadget_001",
2848
+ "moduleKey": "com.atlassian.jira.gadgets:filter-results-gadget",
2849
+ "title": "Open Bugs",
2850
+ "position": {
2851
+ "row": 0,
2852
+ "column": 0
2853
+ },
2854
+ "color": "red",
2855
+ "properties": {
2856
+ "filterId": "filter_001",
2857
+ "num": "10"
2858
+ }
2859
+ },
2860
+ {
2861
+ "gadgetId": "gadget_002",
2862
+ "moduleKey": "com.atlassian.jira.gadgets:sprint-burndown-gadget",
2863
+ "title": "Sprint Burndown",
2864
+ "position": {
2865
+ "row": 0,
2866
+ "column": 1
2867
+ },
2868
+ "color": "blue",
2869
+ "properties": {
2870
+ "boardId": "1"
2871
+ }
2872
+ }
2873
+ ],
2874
+ "isFavourite": true,
2875
+ "self": "https://your-domain.atlassian.net/rest/api/3/dashboard/dash_001",
2876
+ "createdAt": "2024-02-01T10:00:00.000Z",
2877
+ "updatedAt": "2024-06-15T10:00:00.000Z"
2878
+ },
2879
+ {
2880
+ "id": 2,
2881
+ "dashboardId": "dash_002",
2882
+ "name": "DevOps Pipeline",
2883
+ "description": "CI/CD pipeline status and deployment metrics",
2884
+ "owner": "5b10e5b682e05b22cc7d7c03",
2885
+ "isShared": true,
2886
+ "gadgets": [
2887
+ {
2888
+ "gadgetId": "gadget_003",
2889
+ "moduleKey": "com.atlassian.jira.gadgets:pie-chart-gadget",
2890
+ "title": "Issues by Priority",
2891
+ "position": {
2892
+ "row": 0,
2893
+ "column": 0
2894
+ },
2895
+ "color": "green",
2896
+ "properties": {
2897
+ "projectId": "3",
2898
+ "statType": "priority"
2899
+ }
2900
+ },
2901
+ {
2902
+ "gadgetId": "gadget_004",
2903
+ "moduleKey": "com.atlassian.jira.gadgets:created-vs-resolved-gadget",
2904
+ "title": "Created vs Resolved",
2905
+ "position": {
2906
+ "row": 1,
2907
+ "column": 0
2908
+ },
2909
+ "color": "blue",
2910
+ "properties": {
2911
+ "projectId": "3",
2912
+ "period": "weekly"
2913
+ }
2914
+ }
2915
+ ],
2916
+ "isFavourite": false,
2917
+ "self": "https://your-domain.atlassian.net/rest/api/3/dashboard/dash_002",
2918
+ "createdAt": "2024-03-15T10:00:00.000Z",
2919
+ "updatedAt": "2024-06-20T14:00:00.000Z"
2920
+ }
2921
+ ],
2922
+ "filters": [
2923
+ {
2924
+ "id": 1,
2925
+ "filterId": "filter_001",
2926
+ "name": "Open Bugs - All Projects",
2927
+ "jql": "type = Bug AND status != Done AND status != Closed ORDER BY priority DESC",
2928
+ "description": "All open bugs across projects, sorted by priority",
2929
+ "owner": "5b10a2844c20165700ede21g",
2930
+ "favourite": true,
2931
+ "sharePermissions": [
2932
+ {
2933
+ "type": "project",
2934
+ "project": {
2935
+ "id": "1"
2936
+ }
2937
+ },
2938
+ {
2939
+ "type": "project",
2940
+ "project": {
2941
+ "id": "2"
2942
+ }
2943
+ }
2944
+ ],
2945
+ "self": "https://your-domain.atlassian.net/rest/api/3/filter/filter_001",
2946
+ "createdAt": "2024-02-01T10:00:00.000Z",
2947
+ "updatedAt": "2024-06-01T10:00:00.000Z"
2948
+ },
2949
+ {
2950
+ "id": 2,
2951
+ "filterId": "filter_002",
2952
+ "name": "My In Progress",
2953
+ "jql": "assignee = currentUser() AND status = 'In Progress' ORDER BY updated DESC",
2954
+ "description": "Issues currently in progress assigned to me",
2955
+ "owner": "5b10ac8d82e05b22cc7d4ef5",
2956
+ "favourite": true,
2957
+ "sharePermissions": [],
2958
+ "self": "https://your-domain.atlassian.net/rest/api/3/filter/filter_002",
2959
+ "createdAt": "2024-03-10T09:00:00.000Z",
2960
+ "updatedAt": "2024-03-10T09:00:00.000Z"
2961
+ },
2962
+ {
2963
+ "id": 3,
2964
+ "filterId": "filter_003",
2965
+ "name": "Unassigned Backlog",
2966
+ "jql": "assignee = EMPTY AND status = 'To Do' AND project = PLAT ORDER BY created ASC",
2967
+ "description": "Unassigned items in the Platform backlog",
2968
+ "owner": "5b10f2c482e05b22cc7d9a01",
2969
+ "favourite": false,
2970
+ "sharePermissions": [
2971
+ {
2972
+ "type": "project",
2973
+ "project": {
2974
+ "id": "1"
2975
+ }
2976
+ }
2977
+ ],
2978
+ "self": "https://your-domain.atlassian.net/rest/api/3/filter/filter_003",
2979
+ "createdAt": "2024-04-20T11:00:00.000Z",
2980
+ "updatedAt": "2024-04-20T11:00:00.000Z"
2981
+ }
2982
+ ],
2983
+ "automationRules": [
2984
+ {
2985
+ "id": 1,
2986
+ "ruleId": "rule_001",
2987
+ "name": "Auto-assign reviewer on In Review",
2988
+ "projectId": 1,
2989
+ "state": "ENABLED",
2990
+ "trigger": {
2991
+ "type": "field_value_changed",
2992
+ "value": "status"
2993
+ },
2994
+ "conditions": [
2995
+ {
2996
+ "type": "field_equals",
2997
+ "value": "In Review"
2998
+ }
2999
+ ],
3000
+ "actions": [
3001
+ {
3002
+ "type": "add_comment",
3003
+ "value": {
3004
+ "body": "Issue moved to review. Please assign a reviewer."
3005
+ }
3006
+ }
3007
+ ],
3008
+ "actorAccountId": "5b10a2844c20165700ede21g",
3009
+ "created": "2024-03-01T10:00:00.000Z",
3010
+ "self": "https://your-domain.atlassian.net/rest/api/3/automation/rule/rule_001",
3011
+ "createdAt": "2024-03-01T10:00:00.000Z",
3012
+ "updatedAt": "2024-06-15T10:00:00.000Z"
3013
+ },
3014
+ {
3015
+ "id": 2,
3016
+ "ruleId": "rule_002",
3017
+ "name": "Close stale issues after 90 days",
3018
+ "projectId": 1,
3019
+ "state": "DISABLED",
3020
+ "trigger": {
3021
+ "type": "scheduled",
3022
+ "value": "0 9 * * 1"
3023
+ },
3024
+ "conditions": [
3025
+ {
3026
+ "type": "issue_stale",
3027
+ "value": "90d"
3028
+ }
3029
+ ],
3030
+ "actions": [
3031
+ {
3032
+ "type": "transition_issue",
3033
+ "value": {
3034
+ "statusId": 4
3035
+ }
3036
+ },
3037
+ {
3038
+ "type": "add_comment",
3039
+ "value": {
3040
+ "body": "Automatically closed due to 90 days of inactivity."
3041
+ }
3042
+ }
3043
+ ],
3044
+ "actorAccountId": "5b10a2844c20165700ede21g",
3045
+ "created": "2024-04-15T09:00:00.000Z",
3046
+ "self": "https://your-domain.atlassian.net/rest/api/3/automation/rule/rule_002",
3047
+ "createdAt": "2024-04-15T09:00:00.000Z",
3048
+ "updatedAt": "2024-05-01T09:00:00.000Z"
3049
+ }
3050
+ ],
3051
+ "notifications": [
3052
+ {
3053
+ "id": 1,
3054
+ "notificationId": "notif_001",
3055
+ "issueKey": "PLAT-1",
3056
+ "type": "issue_assigned",
3057
+ "userId": "5b10ac8d82e05b22cc7d4ef5",
3058
+ "readAt": "2024-06-01T10:30:00.000Z",
3059
+ "created": "2024-06-01T10:00:00.000Z",
3060
+ "createdAt": "2024-06-01T10:00:00.000Z",
3061
+ "updatedAt": "2024-06-01T10:30:00.000Z"
3062
+ },
3063
+ {
3064
+ "id": 2,
3065
+ "notificationId": "notif_002",
3066
+ "issueKey": "PLAT-5",
3067
+ "type": "issue_updated",
3068
+ "userId": "5b10a2844c20165700ede21g",
3069
+ "readAt": null,
3070
+ "created": "2024-06-20T14:00:00.000Z",
3071
+ "createdAt": "2024-06-20T14:00:00.000Z",
3072
+ "updatedAt": "2024-06-20T14:00:00.000Z"
3073
+ },
3074
+ {
3075
+ "id": 3,
3076
+ "notificationId": "notif_003",
3077
+ "issueKey": "PLAT-8",
3078
+ "type": "comment_added",
3079
+ "userId": "5b10f2c482e05b22cc7d9a01",
3080
+ "readAt": "2024-06-18T16:00:00.000Z",
3081
+ "created": "2024-06-18T15:30:00.000Z",
3082
+ "createdAt": "2024-06-18T15:30:00.000Z",
3083
+ "updatedAt": "2024-06-18T16:00:00.000Z"
3084
+ },
3085
+ {
3086
+ "id": 4,
3087
+ "notificationId": "notif_004",
3088
+ "issueKey": "MOBILE-3",
3089
+ "type": "issue_created",
3090
+ "userId": "5b10d3a482e05b22cc7d8b02",
3091
+ "readAt": null,
3092
+ "created": "2024-06-22T09:00:00.000Z",
3093
+ "createdAt": "2024-06-22T09:00:00.000Z",
3094
+ "updatedAt": "2024-06-22T09:00:00.000Z"
3095
+ },
3096
+ {
3097
+ "id": 5,
3098
+ "notificationId": "notif_005",
3099
+ "issueKey": "OPS-2",
3100
+ "type": "issue_assigned",
3101
+ "userId": "5b10e5b682e05b22cc7d7c03",
3102
+ "readAt": null,
3103
+ "created": "2024-06-25T11:00:00.000Z",
3104
+ "createdAt": "2024-06-25T11:00:00.000Z",
3105
+ "updatedAt": "2024-06-25T11:00:00.000Z"
3106
+ }
3107
+ ],
3108
+ "securityLevels": [
3109
+ {
3110
+ "id": 1,
3111
+ "securityLevelId": "sl_001",
3112
+ "name": "Public",
3113
+ "description": "Visible to all project members",
3114
+ "schemeId": "scheme_001",
3115
+ "projectId": 1,
3116
+ "self": "https://your-domain.atlassian.net/rest/api/3/securitylevel/sl_001",
3117
+ "createdAt": "2024-01-01T00:00:00.000Z",
3118
+ "updatedAt": "2024-01-01T00:00:00.000Z"
3119
+ },
3120
+ {
3121
+ "id": 2,
3122
+ "securityLevelId": "sl_002",
3123
+ "name": "Internal",
3124
+ "description": "Visible only to team leads and above",
3125
+ "schemeId": "scheme_001",
3126
+ "projectId": 1,
3127
+ "self": "https://your-domain.atlassian.net/rest/api/3/securitylevel/sl_002",
3128
+ "createdAt": "2024-01-01T00:00:00.000Z",
3129
+ "updatedAt": "2024-01-01T00:00:00.000Z"
3130
+ },
3131
+ {
3132
+ "id": 3,
3133
+ "securityLevelId": "sl_003",
3134
+ "name": "Confidential",
3135
+ "description": "Restricted to project administrators only",
3136
+ "schemeId": "scheme_001",
3137
+ "projectId": 1,
3138
+ "self": "https://your-domain.atlassian.net/rest/api/3/securitylevel/sl_003",
3139
+ "createdAt": "2024-01-01T00:00:00.000Z",
3140
+ "updatedAt": "2024-01-01T00:00:00.000Z"
3141
+ }
3142
+ ]
3143
+ }