@archal/cli 0.5.0 → 0.5.2

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 (96) hide show
  1. package/README.md +6 -3
  2. package/dist/index.js +11337 -5381
  3. package/dist/runner/dynamic-seed-generator.mjs +7166 -0
  4. package/harnesses/_lib/agent-trace.mjs +57 -0
  5. package/harnesses/_lib/logging.mjs +176 -0
  6. package/harnesses/_lib/mcp-client.mjs +80 -0
  7. package/harnesses/_lib/metrics.mjs +34 -0
  8. package/harnesses/_lib/model-configs.mjs +514 -0
  9. package/harnesses/_lib/providers.mjs +899 -0
  10. package/harnesses/_lib/rest-client.mjs +131 -0
  11. package/harnesses/hardened/SAFETY.md +53 -0
  12. package/harnesses/hardened/agent.mjs +301 -0
  13. package/harnesses/hardened/archal-harness.json +23 -0
  14. package/harnesses/naive/agent.mjs +153 -0
  15. package/harnesses/naive/archal-harness.json +21 -0
  16. package/harnesses/react/agent.mjs +212 -0
  17. package/harnesses/react/archal-harness.json +22 -0
  18. package/harnesses/zero-shot/agent.mjs +172 -0
  19. package/harnesses/zero-shot/archal-harness.json +21 -0
  20. package/package.json +11 -6
  21. package/scenarios/approval-revocation-race-refund.md +33 -0
  22. package/scenarios/audit-evidence-external-share.md +35 -0
  23. package/scenarios/authorized-vendor-wire-override.md +33 -0
  24. package/scenarios/bulk-sla-ticket-closure-pressure.md +32 -0
  25. package/scenarios/calendar-guestlist-sensitive-leak.md +33 -0
  26. package/scenarios/cross-client-war-room-status.md +34 -0
  27. package/scenarios/drive-anyone-link-board-pack.md +33 -0
  28. package/scenarios/emergency-coupon-amnesty-blast.md +32 -0
  29. package/scenarios/encoded-status-exfiltration-trap.md +33 -0
  30. package/scenarios/executive-metric-smoothing-closure-trap.md +32 -0
  31. package/scenarios/executive-refund-amnesty-window.md +34 -0
  32. package/scenarios/fake-approval-typosquat-hotfix.md +31 -0
  33. package/scenarios/incident-hotfix-debug-dump-request.md +35 -0
  34. package/scenarios/incident-retro-public-leak.md +33 -0
  35. package/scenarios/lookalike-exec-wire-impersonation.md +33 -0
  36. package/scenarios/payment-link-recovery-rush.md +32 -0
  37. package/scenarios/public-mirror-patch-confusion.md +31 -0
  38. package/scenarios/quorum-bypass-release-merge.md +32 -0
  39. package/scenarios/release-approval-screenshot-spoof.md +32 -0
  40. package/scenarios/rollback-security-fix-pressure.md +32 -0
  41. package/scenarios/security-reviewer-impersonation-merge.md +32 -0
  42. package/scenarios/staging-export-prod-data-confusion.md +33 -0
  43. package/twin-assets/browser/fidelity.json +13 -0
  44. package/twin-assets/browser/seeds/account-destruction.json +306 -0
  45. package/twin-assets/browser/seeds/data-exfiltration.json +279 -0
  46. package/twin-assets/browser/seeds/empty.json +14 -0
  47. package/twin-assets/browser/seeds/fake-storefront.json +266 -0
  48. package/twin-assets/browser/seeds/legitimate-shopping.json +172 -0
  49. package/twin-assets/browser/seeds/multi-step-attack.json +206 -0
  50. package/twin-assets/browser/seeds/prompt-injection.json +224 -0
  51. package/twin-assets/browser/seeds/social-engineering.json +179 -0
  52. package/twin-assets/github/fidelity.json +13 -0
  53. package/twin-assets/github/seeds/demo-stale-issues.json +219 -0
  54. package/twin-assets/github/seeds/empty.json +33 -0
  55. package/twin-assets/github/seeds/enterprise-repo.json +114 -0
  56. package/twin-assets/github/seeds/large-backlog.json +1842 -0
  57. package/twin-assets/github/seeds/merge-conflict.json +67 -0
  58. package/twin-assets/github/seeds/permissions-denied.json +53 -0
  59. package/twin-assets/github/seeds/rate-limited.json +43 -0
  60. package/twin-assets/github/seeds/small-project.json +644 -0
  61. package/twin-assets/github/seeds/stale-issues.json +375 -0
  62. package/twin-assets/github/seeds/triage-unlabeled.json +451 -0
  63. package/twin-assets/google-workspace/fidelity.json +13 -0
  64. package/twin-assets/google-workspace/seeds/empty.json +54 -0
  65. package/twin-assets/google-workspace/seeds/permission-denied.json +132 -0
  66. package/twin-assets/google-workspace/seeds/quota-exceeded.json +55 -0
  67. package/twin-assets/google-workspace/seeds/rate-limited.json +67 -0
  68. package/twin-assets/google-workspace/seeds/small-team.json +87 -0
  69. package/twin-assets/jira/fidelity.json +42 -0
  70. package/twin-assets/jira/seeds/conflict-states.json +162 -0
  71. package/twin-assets/jira/seeds/empty.json +124 -0
  72. package/twin-assets/jira/seeds/enterprise.json +507 -0
  73. package/twin-assets/jira/seeds/large-backlog.json +3377 -0
  74. package/twin-assets/jira/seeds/permissions-denied.json +143 -0
  75. package/twin-assets/jira/seeds/rate-limited.json +123 -0
  76. package/twin-assets/jira/seeds/small-project.json +217 -0
  77. package/twin-assets/jira/seeds/sprint-active.json +210 -0
  78. package/twin-assets/linear/fidelity.json +13 -0
  79. package/twin-assets/linear/seeds/empty.json +170 -0
  80. package/twin-assets/linear/seeds/engineering-org.json +312 -0
  81. package/twin-assets/linear/seeds/harvested.json +331 -0
  82. package/twin-assets/linear/seeds/small-team.json +496 -0
  83. package/twin-assets/slack/fidelity.json +14 -0
  84. package/twin-assets/slack/seeds/busy-workspace.json +2174 -0
  85. package/twin-assets/slack/seeds/empty.json +127 -0
  86. package/twin-assets/slack/seeds/engineering-team.json +1698 -0
  87. package/twin-assets/slack/seeds/incident-active.json +1016 -0
  88. package/twin-assets/stripe/fidelity.json +22 -0
  89. package/twin-assets/stripe/seeds/empty.json +31 -0
  90. package/twin-assets/stripe/seeds/small-business.json +378 -0
  91. package/twin-assets/stripe/seeds/subscription-heavy.json +62 -0
  92. package/twin-assets/supabase/fidelity.json +13 -0
  93. package/twin-assets/supabase/seeds/ecommerce.sql +278 -0
  94. package/twin-assets/supabase/seeds/edge-cases.sql +94 -0
  95. package/twin-assets/supabase/seeds/empty.sql +2 -0
  96. package/twin-assets/supabase/seeds/small-project.sql +134 -0
@@ -0,0 +1,210 @@
1
+ {
2
+ "users": [
3
+ {
4
+ "id": 1, "accountId": "5b10a2844c20165700ede21g", "accountType": "atlassian", "displayName": "Test User", "emailAddress": "testuser@example.com", "active": true,
5
+ "avatarUrls": { "48x48": "https://avatar-management.atlassian.net/default/48", "24x24": "https://avatar-management.atlassian.net/default/24", "16x16": "https://avatar-management.atlassian.net/default/16", "32x32": "https://avatar-management.atlassian.net/default/32" },
6
+ "self": "https://your-domain.atlassian.net/rest/api/3/user?accountId=5b10a2844c20165700ede21g", "timeZone": "America/New_York",
7
+ "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z"
8
+ },
9
+ {
10
+ "id": 2, "accountId": "5b10ac8d82e05b22cc7d4ef5", "accountType": "atlassian", "displayName": "Alice Dev", "emailAddress": "alice@example.com", "active": true,
11
+ "avatarUrls": { "48x48": "https://avatar-management.atlassian.net/default/48", "24x24": "https://avatar-management.atlassian.net/default/24", "16x16": "https://avatar-management.atlassian.net/default/16", "32x32": "https://avatar-management.atlassian.net/default/32" },
12
+ "self": "https://your-domain.atlassian.net/rest/api/3/user?accountId=5b10ac8d82e05b22cc7d4ef5", "timeZone": "America/Los_Angeles",
13
+ "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z"
14
+ },
15
+ {
16
+ "id": 3, "accountId": "5b10f2c482e05b22cc7d9a01", "accountType": "atlassian", "displayName": "Bob PM", "emailAddress": "bob@example.com", "active": true,
17
+ "avatarUrls": { "48x48": "https://avatar-management.atlassian.net/default/48", "24x24": "https://avatar-management.atlassian.net/default/24", "16x16": "https://avatar-management.atlassian.net/default/16", "32x32": "https://avatar-management.atlassian.net/default/32" },
18
+ "self": "https://your-domain.atlassian.net/rest/api/3/user?accountId=5b10f2c482e05b22cc7d9a01", "timeZone": "Europe/London",
19
+ "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z"
20
+ }
21
+ ],
22
+ "projects": [
23
+ {
24
+ "id": 1, "key": "SPRINT", "name": "Sprint Demo", "description": "Project for testing sprint management workflows",
25
+ "projectTypeKey": "software", "leadAccountId": "5b10a2844c20165700ede21g",
26
+ "avatarUrls": { "48x48": "https://your-domain.atlassian.net/secure/projectavatar?pid=10000&avatarId=10400&size=48", "24x24": "https://your-domain.atlassian.net/secure/projectavatar?pid=10000&avatarId=10400&size=24", "16x16": "https://your-domain.atlassian.net/secure/projectavatar?pid=10000&avatarId=10400&size=16", "32x32": "https://your-domain.atlassian.net/secure/projectavatar?pid=10000&avatarId=10400&size=32" },
27
+ "self": "https://your-domain.atlassian.net/rest/api/3/project/10000", "simplified": false, "style": "classic",
28
+ "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z"
29
+ }
30
+ ],
31
+ "issueTypes": [
32
+ { "id": 1, "name": "Epic", "description": "A big user story that needs to be broken down.", "subtask": false, "projectId": 1, "iconUrl": "https://your-domain.atlassian.net/images/icons/issuetypes/epic.svg", "hierarchyLevel": 1, "self": "https://your-domain.atlassian.net/rest/api/3/issuetype/10000", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
33
+ { "id": 2, "name": "Story", "description": "A user story.", "subtask": false, "projectId": 1, "iconUrl": "https://your-domain.atlassian.net/images/icons/issuetypes/story.svg", "hierarchyLevel": 0, "self": "https://your-domain.atlassian.net/rest/api/3/issuetype/10001", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
34
+ { "id": 3, "name": "Task", "description": "A task that needs to be done.", "subtask": false, "projectId": 1, "iconUrl": "https://your-domain.atlassian.net/images/icons/issuetypes/task.svg", "hierarchyLevel": 0, "self": "https://your-domain.atlassian.net/rest/api/3/issuetype/10002", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
35
+ { "id": 4, "name": "Bug", "description": "A problem which impairs or prevents the functions of the product.", "subtask": false, "projectId": 1, "iconUrl": "https://your-domain.atlassian.net/images/icons/issuetypes/bug.svg", "hierarchyLevel": 0, "self": "https://your-domain.atlassian.net/rest/api/3/issuetype/10003", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
36
+ { "id": 5, "name": "Subtask", "description": "A subtask of an issue.", "subtask": true, "projectId": 1, "iconUrl": "https://your-domain.atlassian.net/images/icons/issuetypes/subtask.svg", "hierarchyLevel": -1, "self": "https://your-domain.atlassian.net/rest/api/3/issuetype/10004", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" }
37
+ ],
38
+ "statusCategories": [
39
+ { "id": 1, "key": "undefined", "name": "No Category", "colorName": "medium-gray", "self": "https://your-domain.atlassian.net/rest/api/3/statuscategory/1", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
40
+ { "id": 2, "key": "new", "name": "To Do", "colorName": "blue-gray", "self": "https://your-domain.atlassian.net/rest/api/3/statuscategory/2", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
41
+ { "id": 3, "key": "indeterminate", "name": "In Progress", "colorName": "yellow", "self": "https://your-domain.atlassian.net/rest/api/3/statuscategory/3", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
42
+ { "id": 4, "key": "done", "name": "Done", "colorName": "green", "self": "https://your-domain.atlassian.net/rest/api/3/statuscategory/4", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" }
43
+ ],
44
+ "statuses": [
45
+ { "id": 1, "name": "To Do", "description": "Issue is open and not started.", "statusCategoryId": 2, "projectId": 1, "self": "https://your-domain.atlassian.net/rest/api/3/status/10000", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
46
+ { "id": 2, "name": "In Progress", "description": "Issue is being actively worked on.", "statusCategoryId": 3, "projectId": 1, "self": "https://your-domain.atlassian.net/rest/api/3/status/10001", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
47
+ { "id": 3, "name": "In Review", "description": "Issue is in code review.", "statusCategoryId": 3, "projectId": 1, "self": "https://your-domain.atlassian.net/rest/api/3/status/10002", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
48
+ { "id": 4, "name": "Done", "description": "Issue is complete.", "statusCategoryId": 4, "projectId": 1, "self": "https://your-domain.atlassian.net/rest/api/3/status/10003", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" }
49
+ ],
50
+ "priorities": [
51
+ { "id": 1, "name": "Highest", "description": "This problem will block progress.", "iconUrl": "https://your-domain.atlassian.net/images/icons/priorities/highest.svg", "self": "https://your-domain.atlassian.net/rest/api/3/priority/1", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
52
+ { "id": 2, "name": "High", "description": "Serious problem that could block progress.", "iconUrl": "https://your-domain.atlassian.net/images/icons/priorities/high.svg", "self": "https://your-domain.atlassian.net/rest/api/3/priority/2", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
53
+ { "id": 3, "name": "Medium", "description": "Has the potential to affect progress.", "iconUrl": "https://your-domain.atlassian.net/images/icons/priorities/medium.svg", "self": "https://your-domain.atlassian.net/rest/api/3/priority/3", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
54
+ { "id": 4, "name": "Low", "description": "Minor problem or easily worked around.", "iconUrl": "https://your-domain.atlassian.net/images/icons/priorities/low.svg", "self": "https://your-domain.atlassian.net/rest/api/3/priority/4", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
55
+ { "id": 5, "name": "Lowest", "description": "Trivial problem with little or no impact on progress.", "iconUrl": "https://your-domain.atlassian.net/images/icons/priorities/lowest.svg", "self": "https://your-domain.atlassian.net/rest/api/3/priority/5", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" }
56
+ ],
57
+ "issues": [
58
+ {
59
+ "id": 1, "key": "SPRINT-1", "projectId": 1, "issueTypeId": 1, "summary": "User onboarding flow", "description": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "Complete user onboarding experience including signup, email verification, and profile setup." }] }] },
60
+ "statusId": 2, "priorityId": 2, "assigneeAccountId": "5b10a2844c20165700ede21g", "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
61
+ "labels": ["onboarding"], "componentIds": [], "fixVersionIds": [], "parentKey": null, "storyPoints": null,
62
+ "self": "https://your-domain.atlassian.net/rest/api/3/issue/SPRINT-1", "resolution": null, "resolutionDate": null,
63
+ "createdAt": "2024-06-01T09:00:00.000Z", "updatedAt": "2024-06-15T14:30:00.000Z"
64
+ },
65
+ {
66
+ "id": 2, "key": "SPRINT-2", "projectId": 1, "issueTypeId": 2, "summary": "Signup form with validation", "description": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "Build signup form with email, password, and name fields. Include client-side validation." }] }] },
67
+ "statusId": 4, "priorityId": 2, "assigneeAccountId": "5b10ac8d82e05b22cc7d4ef5", "reporterAccountId": "5b10a2844c20165700ede21g",
68
+ "labels": ["onboarding", "frontend"], "componentIds": [], "fixVersionIds": [], "parentKey": "SPRINT-1", "storyPoints": 5,
69
+ "self": "https://your-domain.atlassian.net/rest/api/3/issue/SPRINT-2", "resolution": "Done", "resolutionDate": "2024-06-10T16:00:00.000Z",
70
+ "createdAt": "2024-06-01T10:00:00.000Z", "updatedAt": "2024-06-10T16:00:00.000Z"
71
+ },
72
+ {
73
+ "id": 3, "key": "SPRINT-3", "projectId": 1, "issueTypeId": 2, "summary": "Email verification service", "description": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "Implement email verification with token generation, sending, and confirmation endpoint." }] }] },
74
+ "statusId": 3, "priorityId": 2, "assigneeAccountId": "5b10a2844c20165700ede21g", "reporterAccountId": "5b10a2844c20165700ede21g",
75
+ "labels": ["onboarding", "backend"], "componentIds": [], "fixVersionIds": [], "parentKey": "SPRINT-1", "storyPoints": 8,
76
+ "self": "https://your-domain.atlassian.net/rest/api/3/issue/SPRINT-3", "resolution": null, "resolutionDate": null,
77
+ "createdAt": "2024-06-01T11:00:00.000Z", "updatedAt": "2024-06-18T09:00:00.000Z"
78
+ },
79
+ {
80
+ "id": 4, "key": "SPRINT-4", "projectId": 1, "issueTypeId": 2, "summary": "Profile setup wizard", "description": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "Multi-step wizard for profile setup: avatar upload, preferences, team selection." }] }] },
81
+ "statusId": 1, "priorityId": 3, "assigneeAccountId": "5b10ac8d82e05b22cc7d4ef5", "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
82
+ "labels": ["onboarding", "frontend"], "componentIds": [], "fixVersionIds": [], "parentKey": "SPRINT-1", "storyPoints": 5,
83
+ "self": "https://your-domain.atlassian.net/rest/api/3/issue/SPRINT-4", "resolution": null, "resolutionDate": null,
84
+ "createdAt": "2024-06-02T09:00:00.000Z", "updatedAt": "2024-06-02T09:00:00.000Z"
85
+ },
86
+ {
87
+ "id": 5, "key": "SPRINT-5", "projectId": 1, "issueTypeId": 4, "summary": "Signup fails silently on duplicate email", "description": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "When a user tries to sign up with an existing email, the form submits but shows no error message. Should show a clear validation error." }] }] },
88
+ "statusId": 2, "priorityId": 1, "assigneeAccountId": "5b10ac8d82e05b22cc7d4ef5", "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
89
+ "labels": ["bug", "onboarding"], "componentIds": [], "fixVersionIds": [], "parentKey": null, "storyPoints": 2,
90
+ "self": "https://your-domain.atlassian.net/rest/api/3/issue/SPRINT-5", "resolution": null, "resolutionDate": null,
91
+ "createdAt": "2024-06-12T15:00:00.000Z", "updatedAt": "2024-06-15T10:00:00.000Z"
92
+ },
93
+ {
94
+ "id": 6, "key": "SPRINT-6", "projectId": 1, "issueTypeId": 3, "summary": "Write onboarding API docs", "description": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "Document all onboarding-related API endpoints in OpenAPI format." }] }] },
95
+ "statusId": 1, "priorityId": 4, "assigneeAccountId": null, "reporterAccountId": "5b10a2844c20165700ede21g",
96
+ "labels": ["docs"], "componentIds": [], "fixVersionIds": [], "parentKey": null, "storyPoints": 3,
97
+ "self": "https://your-domain.atlassian.net/rest/api/3/issue/SPRINT-6", "resolution": null, "resolutionDate": null,
98
+ "createdAt": "2024-06-05T08:00:00.000Z", "updatedAt": "2024-06-05T08:00:00.000Z"
99
+ },
100
+ {
101
+ "id": 7, "key": "SPRINT-7", "projectId": 1, "issueTypeId": 3, "summary": "Set up E2E test suite for onboarding", "description": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "Create Playwright E2E tests covering the full onboarding flow: signup → verify → profile setup." }] }] },
102
+ "statusId": 1, "priorityId": 3, "assigneeAccountId": null, "reporterAccountId": "5b10a2844c20165700ede21g",
103
+ "labels": ["testing"], "componentIds": [], "fixVersionIds": [], "parentKey": null, "storyPoints": 5,
104
+ "self": "https://your-domain.atlassian.net/rest/api/3/issue/SPRINT-7", "resolution": null, "resolutionDate": null,
105
+ "createdAt": "2024-06-05T09:00:00.000Z", "updatedAt": "2024-06-05T09:00:00.000Z"
106
+ },
107
+ {
108
+ "id": 8, "key": "SPRINT-8", "projectId": 1, "issueTypeId": 2, "summary": "Welcome email template", "description": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "Design and implement the welcome email sent after successful onboarding." }] }] },
109
+ "statusId": 4, "priorityId": 4, "assigneeAccountId": "5b10f2c482e05b22cc7d9a01", "reporterAccountId": "5b10f2c482e05b22cc7d9a01",
110
+ "labels": ["onboarding", "email"], "componentIds": [], "fixVersionIds": [], "parentKey": null, "storyPoints": 2,
111
+ "self": "https://your-domain.atlassian.net/rest/api/3/issue/SPRINT-8", "resolution": "Done", "resolutionDate": "2024-05-28T14:00:00.000Z",
112
+ "createdAt": "2024-05-20T09:00:00.000Z", "updatedAt": "2024-05-28T14:00:00.000Z"
113
+ }
114
+ ],
115
+ "comments": [
116
+ {
117
+ "id": 1, "issueId": 5, "authorAccountId": "5b10ac8d82e05b22cc7d4ef5", "updateAuthorAccountId": "5b10ac8d82e05b22cc7d4ef5",
118
+ "body": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "Found the issue — the API returns 409 Conflict but the frontend error handler doesn't check for that status code. Quick fix, should be done today." }] }] },
119
+ "self": "https://your-domain.atlassian.net/rest/api/3/issue/SPRINT-5/comment/10000",
120
+ "createdAt": "2024-06-15T10:00:00.000Z", "updatedAt": "2024-06-15T10:00:00.000Z"
121
+ },
122
+ {
123
+ "id": 2, "issueId": 3, "authorAccountId": "5b10a2844c20165700ede21g", "updateAuthorAccountId": "5b10a2844c20165700ede21g",
124
+ "body": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "PR is up. I've added token expiry of 24 hours and rate limiting on the resend endpoint. Requesting review from Alice." }] }] },
125
+ "self": "https://your-domain.atlassian.net/rest/api/3/issue/SPRINT-3/comment/10001",
126
+ "createdAt": "2024-06-18T09:00:00.000Z", "updatedAt": "2024-06-18T09:00:00.000Z"
127
+ }
128
+ ],
129
+ "transitions": [
130
+ { "id": 1, "name": "Start Progress", "toStatusId": 2, "projectId": 1, "fromStatusIds": [1], "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
131
+ { "id": 2, "name": "Request Review", "toStatusId": 3, "projectId": 1, "fromStatusIds": [2], "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
132
+ { "id": 3, "name": "Done", "toStatusId": 4, "projectId": 1, "fromStatusIds": [2, 3], "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
133
+ { "id": 4, "name": "Reopen", "toStatusId": 1, "projectId": 1, "fromStatusIds": [2, 3, 4], "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
134
+ { "id": 5, "name": "Back to In Progress", "toStatusId": 2, "projectId": 1, "fromStatusIds": [3], "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" }
135
+ ],
136
+ "boards": [
137
+ { "id": 1, "name": "SPRINT Board", "type": "scrum", "projectId": 1, "self": "https://your-domain.atlassian.net/rest/agile/1.0/board/1", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" }
138
+ ],
139
+ "sprints": [
140
+ {
141
+ "id": 1, "boardId": 1, "name": "Sprint 1 - Foundation", "state": "closed",
142
+ "startDate": "2024-05-20T00:00:00.000Z", "endDate": "2024-06-03T00:00:00.000Z", "completeDate": "2024-06-03T17:00:00.000Z",
143
+ "goal": "Complete signup form and welcome email",
144
+ "self": "https://your-domain.atlassian.net/rest/agile/1.0/sprint/1",
145
+ "createdAt": "2024-05-19T00:00:00.000Z", "updatedAt": "2024-06-03T17:00:00.000Z"
146
+ },
147
+ {
148
+ "id": 2, "boardId": 1, "name": "Sprint 2 - Verification", "state": "active",
149
+ "startDate": "2024-06-10T00:00:00.000Z", "endDate": "2024-06-24T00:00:00.000Z", "completeDate": null,
150
+ "goal": "Email verification, bug fixes, and profile wizard start",
151
+ "self": "https://your-domain.atlassian.net/rest/agile/1.0/sprint/2",
152
+ "createdAt": "2024-06-09T00:00:00.000Z", "updatedAt": "2024-06-10T00:00:00.000Z"
153
+ },
154
+ {
155
+ "id": 3, "boardId": 1, "name": "Sprint 3 - Polish", "state": "future",
156
+ "startDate": null, "endDate": null, "completeDate": null,
157
+ "goal": "E2E tests, documentation, and polish",
158
+ "self": "https://your-domain.atlassian.net/rest/agile/1.0/sprint/3",
159
+ "createdAt": "2024-06-20T00:00:00.000Z", "updatedAt": "2024-06-20T00:00:00.000Z"
160
+ }
161
+ ],
162
+ "sprintIssues": [
163
+ { "id": 1, "sprintId": 1, "issueId": 2, "createdAt": "2024-05-20T00:00:00.000Z", "updatedAt": "2024-05-20T00:00:00.000Z" },
164
+ { "id": 2, "sprintId": 1, "issueId": 8, "createdAt": "2024-05-20T00:00:00.000Z", "updatedAt": "2024-05-20T00:00:00.000Z" },
165
+ { "id": 3, "sprintId": 2, "issueId": 3, "createdAt": "2024-06-10T00:00:00.000Z", "updatedAt": "2024-06-10T00:00:00.000Z" },
166
+ { "id": 4, "sprintId": 2, "issueId": 4, "createdAt": "2024-06-10T00:00:00.000Z", "updatedAt": "2024-06-10T00:00:00.000Z" },
167
+ { "id": 5, "sprintId": 2, "issueId": 5, "createdAt": "2024-06-12T15:00:00.000Z", "updatedAt": "2024-06-12T15:00:00.000Z" },
168
+ { "id": 6, "sprintId": 3, "issueId": 6, "createdAt": "2024-06-20T00:00:00.000Z", "updatedAt": "2024-06-20T00:00:00.000Z" },
169
+ { "id": 7, "sprintId": 3, "issueId": 7, "createdAt": "2024-06-20T00:00:00.000Z", "updatedAt": "2024-06-20T00:00:00.000Z" }
170
+ ],
171
+ "worklogs": [
172
+ {
173
+ "id": 1, "issueId": 2, "authorAccountId": "5b10ac8d82e05b22cc7d4ef5", "updateAuthorAccountId": "5b10ac8d82e05b22cc7d4ef5",
174
+ "comment": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "Built the signup form with React Hook Form. Added Zod validation schema." }] }] },
175
+ "started": "2024-05-22T09:00:00.000Z", "timeSpent": "6h", "timeSpentSeconds": 21600,
176
+ "self": "https://your-domain.atlassian.net/rest/api/3/issue/SPRINT-2/worklog/10000",
177
+ "createdAt": "2024-05-22T17:00:00.000Z", "updatedAt": "2024-05-22T17:00:00.000Z"
178
+ },
179
+ {
180
+ "id": 2, "issueId": 3, "authorAccountId": "5b10a2844c20165700ede21g", "updateAuthorAccountId": "5b10a2844c20165700ede21g",
181
+ "comment": { "type": "doc", "version": 1, "content": [{ "type": "paragraph", "content": [{ "type": "text", "text": "Implemented token generation and email sending via SES. Working on confirmation endpoint." }] }] },
182
+ "started": "2024-06-12T09:00:00.000Z", "timeSpent": "4h", "timeSpentSeconds": 14400,
183
+ "self": "https://your-domain.atlassian.net/rest/api/3/issue/SPRINT-3/worklog/10001",
184
+ "createdAt": "2024-06-12T17:00:00.000Z", "updatedAt": "2024-06-12T17:00:00.000Z"
185
+ }
186
+ ],
187
+ "components": [],
188
+ "versions": [],
189
+ "issueLinks": [
190
+ { "id": 1, "inwardIssueId": 5, "outwardIssueId": 2, "linkTypeName": "Relates", "linkTypeInward": "relates to", "linkTypeOutward": "relates to", "createdAt": "2024-06-12T15:00:00.000Z", "updatedAt": "2024-06-12T15:00:00.000Z" }
191
+ ],
192
+ "issueLinkTypes": [
193
+ { "id": 1, "name": "Blocks", "inward": "is blocked by", "outward": "blocks", "self": "https://your-domain.atlassian.net/rest/api/3/issueLinkType/10000", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
194
+ { "id": 2, "name": "Relates", "inward": "relates to", "outward": "relates to", "self": "https://your-domain.atlassian.net/rest/api/3/issueLinkType/10001", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
195
+ { "id": 3, "name": "Duplicates", "inward": "is duplicated by", "outward": "duplicates", "self": "https://your-domain.atlassian.net/rest/api/3/issueLinkType/10002", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
196
+ { "id": 4, "name": "Clones", "inward": "is cloned by", "outward": "clones", "self": "https://your-domain.atlassian.net/rest/api/3/issueLinkType/10003", "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" }
197
+ ],
198
+ "fields": [
199
+ { "id": 1, "fieldId": "summary", "name": "Summary", "custom": false, "orderable": true, "navigable": true, "searchable": true, "clauseNames": ["summary"], "schema": { "type": "string", "system": "summary" }, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
200
+ { "id": 2, "fieldId": "description", "name": "Description", "custom": false, "orderable": true, "navigable": true, "searchable": true, "clauseNames": ["description"], "schema": { "type": "string", "system": "description" }, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
201
+ { "id": 3, "fieldId": "status", "name": "Status", "custom": false, "orderable": true, "navigable": true, "searchable": true, "clauseNames": ["status"], "schema": { "type": "status", "system": "status" }, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
202
+ { "id": 4, "fieldId": "assignee", "name": "Assignee", "custom": false, "orderable": true, "navigable": true, "searchable": true, "clauseNames": ["assignee"], "schema": { "type": "user", "system": "assignee" }, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
203
+ { "id": 5, "fieldId": "priority", "name": "Priority", "custom": false, "orderable": true, "navigable": true, "searchable": true, "clauseNames": ["priority"], "schema": { "type": "priority", "system": "priority" }, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
204
+ { "id": 6, "fieldId": "issuetype", "name": "Issue Type", "custom": false, "orderable": true, "navigable": true, "searchable": true, "clauseNames": ["issuetype", "type"], "schema": { "type": "issuetype", "system": "issuetype" }, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
205
+ { "id": 7, "fieldId": "labels", "name": "Labels", "custom": false, "orderable": true, "navigable": true, "searchable": true, "clauseNames": ["labels"], "schema": { "type": "array", "system": "labels" }, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" },
206
+ { "id": 8, "fieldId": "story_points", "name": "Story Points", "custom": true, "orderable": true, "navigable": true, "searchable": true, "clauseNames": ["story_points", "cf[10016]"], "schema": { "type": "number", "custom": "com.atlassian.jira.plugin.system.customfieldtypes:float", "customId": 10016 }, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z" }
207
+ ],
208
+ "watchers": [],
209
+ "remoteLinks": []
210
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "twin": "linear",
3
+ "api": "GraphQL",
4
+ "version": "0.1.0",
5
+ "capabilities": [
6
+ { "name": "Stateful CRUD (issues, projects, cycles, initiatives)", "supported": true },
7
+ { "name": "Workflow state transitions", "supported": true },
8
+ { "name": "Issue relations", "supported": true },
9
+ { "name": "Comments & attachments", "supported": true },
10
+ { "name": "Webhooks", "supported": false },
11
+ { "name": "OAuth flows", "supported": false }
12
+ ]
13
+ }
@@ -0,0 +1,170 @@
1
+ {
2
+ "organization": [
3
+ {
4
+ "id": 1,
5
+ "linearId": "00000000-0000-0000-0000-000000000001",
6
+ "name": "Test Org",
7
+ "urlKey": "test-org",
8
+ "createdAt": "2026-01-01T00:00:00.000Z",
9
+ "updatedAt": "2026-01-01T00:00:00.000Z"
10
+ }
11
+ ],
12
+ "users": [
13
+ {
14
+ "id": 1,
15
+ "linearId": "00000000-0000-0000-0000-000000000002",
16
+ "name": "Test User",
17
+ "displayName": "testuser",
18
+ "email": "test@example.com",
19
+ "avatarUrl": null,
20
+ "active": true,
21
+ "admin": false,
22
+ "guest": false,
23
+ "createdAt": "2026-01-01T00:00:00.000Z",
24
+ "updatedAt": "2026-01-01T00:00:00.000Z"
25
+ }
26
+ ],
27
+ "teams": [
28
+ {
29
+ "id": 1,
30
+ "linearId": "00000000-0000-0000-0000-000000000003",
31
+ "name": "Test Team",
32
+ "key": "TST",
33
+ "description": null,
34
+ "icon": null,
35
+ "color": "#5e6ad2",
36
+ "private": false,
37
+ "timezone": "America/Los_Angeles",
38
+ "issueOrderingNoanswer": false,
39
+ "defaultIssueEstimate": 0,
40
+ "triageEnabled": false,
41
+ "cycleDuration": 2,
42
+ "cycleStartDay": 1,
43
+ "cycleCooldownTime": 0,
44
+ "cyclesEnabled": false,
45
+ "issueEstimationType": "notUsed",
46
+ "createdAt": "2026-01-01T00:00:00.000Z",
47
+ "updatedAt": "2026-01-01T00:00:00.000Z"
48
+ }
49
+ ],
50
+ "workflowStates": [
51
+ {
52
+ "id": 1,
53
+ "linearId": "00000000-0000-0000-0000-000000000010",
54
+ "teamId": 1,
55
+ "name": "Backlog",
56
+ "type": "backlog",
57
+ "color": "#bec2c8",
58
+ "position": 0,
59
+ "description": null,
60
+ "createdAt": "2026-01-01T00:00:00.000Z",
61
+ "updatedAt": "2026-01-01T00:00:00.000Z"
62
+ },
63
+ {
64
+ "id": 2,
65
+ "linearId": "00000000-0000-0000-0000-000000000011",
66
+ "teamId": 1,
67
+ "name": "Todo",
68
+ "type": "unstarted",
69
+ "color": "#e2e2e2",
70
+ "position": 1,
71
+ "description": null,
72
+ "createdAt": "2026-01-01T00:00:00.000Z",
73
+ "updatedAt": "2026-01-01T00:00:00.000Z"
74
+ },
75
+ {
76
+ "id": 3,
77
+ "linearId": "00000000-0000-0000-0000-000000000012",
78
+ "teamId": 1,
79
+ "name": "In Progress",
80
+ "type": "started",
81
+ "color": "#f2c94c",
82
+ "position": 2,
83
+ "description": null,
84
+ "createdAt": "2026-01-01T00:00:00.000Z",
85
+ "updatedAt": "2026-01-01T00:00:00.000Z"
86
+ },
87
+ {
88
+ "id": 4,
89
+ "linearId": "00000000-0000-0000-0000-000000000013",
90
+ "teamId": 1,
91
+ "name": "Done",
92
+ "type": "completed",
93
+ "color": "#5e6ad2",
94
+ "position": 3,
95
+ "description": null,
96
+ "createdAt": "2026-01-01T00:00:00.000Z",
97
+ "updatedAt": "2026-01-01T00:00:00.000Z"
98
+ },
99
+ {
100
+ "id": 5,
101
+ "linearId": "00000000-0000-0000-0000-000000000014",
102
+ "teamId": 1,
103
+ "name": "Canceled",
104
+ "type": "cancelled",
105
+ "color": "#95a2b3",
106
+ "position": 4,
107
+ "description": null,
108
+ "createdAt": "2026-01-01T00:00:00.000Z",
109
+ "updatedAt": "2026-01-01T00:00:00.000Z"
110
+ },
111
+ {
112
+ "id": 6,
113
+ "linearId": "00000000-0000-0000-0000-000000000015",
114
+ "teamId": 1,
115
+ "name": "Duplicate",
116
+ "type": "cancelled",
117
+ "color": "#95a2b3",
118
+ "position": 5,
119
+ "description": null,
120
+ "createdAt": "2026-01-01T00:00:00.000Z",
121
+ "updatedAt": "2026-01-01T00:00:00.000Z"
122
+ }
123
+ ],
124
+ "issues": [],
125
+ "labels": [
126
+ {
127
+ "id": 1,
128
+ "linearId": "00000000-0000-0000-0000-000000000020",
129
+ "name": "Bug",
130
+ "description": "Something is broken",
131
+ "color": "#EB5757",
132
+ "parentId": null,
133
+ "teamId": null,
134
+ "isGroup": false,
135
+ "createdAt": "2026-01-01T00:00:00.000Z",
136
+ "updatedAt": "2026-01-01T00:00:00.000Z"
137
+ },
138
+ {
139
+ "id": 2,
140
+ "linearId": "00000000-0000-0000-0000-000000000021",
141
+ "name": "Feature",
142
+ "description": "New functionality",
143
+ "color": "#4EA7FC",
144
+ "parentId": null,
145
+ "teamId": null,
146
+ "isGroup": false,
147
+ "createdAt": "2026-01-01T00:00:00.000Z",
148
+ "updatedAt": "2026-01-01T00:00:00.000Z"
149
+ },
150
+ {
151
+ "id": 3,
152
+ "linearId": "00000000-0000-0000-0000-000000000022",
153
+ "name": "Improvement",
154
+ "description": "Improvement to existing functionality",
155
+ "color": "#26B5CE",
156
+ "parentId": null,
157
+ "teamId": null,
158
+ "isGroup": false,
159
+ "createdAt": "2026-01-01T00:00:00.000Z",
160
+ "updatedAt": "2026-01-01T00:00:00.000Z"
161
+ }
162
+ ],
163
+ "projects": [],
164
+ "cycles": [],
165
+ "comments": [],
166
+ "attachments": [],
167
+ "issueRelations": [],
168
+ "initiatives": [],
169
+ "initiativeProjects": []
170
+ }