-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprogress.txt
More file actions
388 lines (296 loc) · 17.1 KB
/
Copy pathprogress.txt
File metadata and controls
388 lines (296 loc) · 17.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
## 2026-01-19 - Phase 1 Complete (Core + Config)
Implemented jira-cli foundation in jira-cli/ directory:
Files created:
- jira-cli/package.json - CLI package with `jc` binary
- jira-cli/tsconfig.json - TypeScript config (ES2022, NodeNext)
- jira-cli/src/index.ts - CLI entry point with global options
- jira-cli/src/config.ts - Config file + env var resolution
- jira-cli/src/clients/jira.ts - JiraClient with basic auth
- jira-cli/src/types/jira.ts - TypeScript interfaces
- jira-cli/src/utils/output.ts - JSON/plain/minimal formatters
- jira-cli/src/commands/issue.ts - Full issue CRUD + comments
- jira-cli/src/commands/config.ts - Config management
- jira-cli/src/commands/search.ts - JQL search
Commands implemented:
- jc issue list/get/create/edit/delete
- jc issue assign/transitions/transition
- jc issue comments/comment
- jc search <jql>
- jc config init/set/get/list/profile
Auth: env vars (JIRA_DOMAIN, JIRA_EMAIL, JIRA_API_TOKEN) or config file
Note for next person: Phase 2 (Issue CRUD + ADF) partially done since create/edit/delete/assign already implemented. Focus on marklassian integration for proper ADF conversion.
## 2026-01-19 - Phase 3 Complete (Agile - Boards & Sprints)
Implemented full agile support in jira-cli:
Files created:
- jira-cli/src/types/agile.ts - Board, Sprint, BoardConfiguration types
- jira-cli/src/clients/jira-agile.ts - JiraAgileClient for /rest/agile/1.0 API
- jira-cli/src/commands/board.ts - Board commands
- jira-cli/src/commands/sprint.ts - Sprint commands
Commands implemented:
- jc board list/get/config/issues/backlog
- jc sprint list/get/issues/create/start/close/move-issues/to-backlog
API coverage:
- Boards: list, get, configuration, issues, backlog
- Sprints: list, get, issues, create, update (start/close), move issues
Note for next person: Phase 4 (Epics & Backlog) is next. Also Phase 2 still needs marklassian for ADF conversion - lower priority since raw ADF works.
## 2026-01-19 - Phase 4 Complete (Epics & Backlog Ranking)
Added epic management to jira-cli:
Files modified/created:
- jira-cli/src/types/agile.ts - Added Epic, EpicsResponse, MoveIssuesToEpicRequest, RankIssuesRequest types
- jira-cli/src/clients/jira-agile.ts - Added listEpics, getEpic, getEpicIssues, moveIssuesToEpic, removeIssuesFromEpic, rankIssues methods
- jira-cli/src/commands/epic.ts - New file with epic commands
- jira-cli/src/index.ts - Registered epic command
Commands implemented:
- jc epic list <board-id> [--done|--not-done]
- jc epic get <key>
- jc epic issues <key> [-j jql] [--fields]
- jc epic move-issues <key> --issues PROJ-1,PROJ-2
- jc epic remove-issues --issues PROJ-1,PROJ-2
- jc epic rank --issues PROJ-1 --before|--after PROJ-2
API coverage:
- GET /board/{id}/epic - list board epics
- GET /epic/{key} - get epic details
- GET /epic/{key}/issue - get epic issues
- POST /epic/{key}/issue - move issues to epic
- POST /epic/none/issue - remove from epic
- PUT /issue/rank - reorder backlog
Note for next person: Phase 5 (search count, async task polling, archive) or Phase 6 (Confluence) next. marklassian still deferred. Velocity/burndown reports deferred to P2.
## 2026-01-19 - Phase 5 Partial (Search Count)
Added `jc search count` command for approximate issue counts.
Files modified:
- jira-cli/src/types/jira.ts - Added ApproximateCountResponse type
- jira-cli/src/clients/jira.ts - Added getApproximateCount method (POST /search/approximate-count)
- jira-cli/src/commands/search.ts - Added `count` subcommand, restructured to support both `jc search <jql>` and `jc search count <jql>`
Usage:
- jc search count "project = PROJ" → { "count": 42 }
- jc search "project = PROJ" → still works (backwards compatible)
- jc search query "project = PROJ" → explicit query subcommand
Note for next person: Phase 5 still needs async task polling + jc issue archive. Then Phase 6 Confluence. Consider whether async polling is worth it vs jumping to Confluence which has more user value.
## 2026-01-19 - Phase 6 Complete (Confluence)
Implemented Confluence REST API v2 support in jira-cli.
Files created:
- jira-cli/src/types/confluence.ts - Space, Page, FooterComment, Label types
- jira-cli/src/clients/confluence.ts - ConfluenceClient for /wiki/api/v2
- jira-cli/src/commands/space.ts - Space commands
- jira-cli/src/commands/page.ts - Page commands (CRUD + comments + labels)
Files modified:
- jira-cli/src/index.ts - Registered space and page commands
Commands implemented:
- jc space list [--type global|personal] [--status current|archived]
- jc space get <id-or-key>
- jc page list --space <id> [--status] [--sort]
- jc page get <id> [--body storage|atlas_doc_format|view]
- jc page create --space <id> --title <title> [--parent <id>] [--body <html>] [--body-file <path>]
- jc page update <id> --title <title> [--body <html>] [--body-file <path>] [--message <msg>]
- jc page delete <id>
- jc page children <id>
- jc page comments <id>
- jc page comment <id> <text>
- jc page labels <id>
- jc page add-label <id> <label>
API coverage:
- GET /spaces - list spaces
- GET /spaces/{id} - get space
- GET /pages - list pages
- GET /pages/{id} - get page
- POST /pages - create page
- PUT /pages/{id} - update page
- DELETE /pages/{id} - delete page
- GET /pages/{id}/children - child pages
- GET /pages/{id}/footer-comments - list comments
- POST /footer-comments - add comment
- GET /pages/{id}/labels - list labels
- POST /pages/{id}/labels - add label
Note for next person: Phase 7 (Polish) is next: projects, links, labels, filters, worklogs, attachments, watchers. Phase 5 async task polling still outstanding but low priority.
## 2026-01-19 - Phase 7 Partial (Projects)
Implemented `jc project` commands for project management.
Files modified/created:
- jira-cli/src/types/jira.ts - Added ProjectFull, ProjectSearchResult, ProjectStatus, ProjectComponent, ProjectVersion types
- jira-cli/src/clients/jira.ts - Added listProjects, getProject, getProjectStatuses, getProjectComponents, getProjectVersions methods
- jira-cli/src/commands/project.ts - New file with project commands
- jira-cli/src/index.ts - Registered project command
Commands implemented:
- jc project list [-q query] [--type software|business|service_desk] [--order-by name]
- jc project get <key> [--expand description,lead,issueTypes]
- jc project statuses <key>
- jc project components <key>
- jc project versions <key> [--status released|unreleased|archived]
API coverage:
- GET /project/search - list projects with filtering
- GET /project/{key} - get project details
- GET /project/{key}/statuses - list statuses by issue type
- GET /project/{key}/components - list components
- GET /project/{key}/version - list versions with pagination
Note for next person: Phase 7 continues with links, labels, fields, filters. Consider issue links (POST /issueLink, GET /issueLinkType) as next priority - useful for dependency tracking. Async task polling (Phase 5) remains low priority.
## 2026-01-19 - Phase 7 Partial (Issue Links)
Implemented `jc issue link/links/link-types/unlink` commands for issue dependency tracking.
Files modified:
- jira-cli/src/types/jira.ts - Added IssueLinkType, IssueLinkTypesResponse, LinkedIssue, IssueLink, CreateIssueLinkRequest types
- jira-cli/src/clients/jira.ts - Added getIssueLinkTypes, createIssueLink, deleteIssueLink methods
- jira-cli/src/commands/issue.ts - Added link-types, links, link, unlink subcommands
Commands implemented:
- jc issue link-types - List available link types (e.g., "Blocks", "Clones", "Relates")
- jc issue links <key> - List all links for an issue
- jc issue link <key1> <key2> <type> - Create link (key1 outward, key2 inward)
- jc issue unlink <linkId> - Delete a link by ID
API coverage:
- GET /issueLinkType - list link types
- POST /issueLink - create link
- DELETE /issueLink/{id} - delete link
- GET /issue/{key} with issuelinks field - get issue links
Note for next person: Phase 7 continues with labels (`jc labels`, `jc fields`, `jc issue add-label`) and filters. Could also do worklogs/attachments but those are P2. Async task polling (Phase 5) still low priority.
## 2026-01-19 - Phase 7 Partial (Labels & Fields)
Implemented `jc label` and `jc field` commands plus issue label management.
Files created:
- jira-cli/src/commands/label.ts - Label list command
- jira-cli/src/commands/field.ts - Field list command with filters
Files modified:
- jira-cli/src/types/jira.ts - Added Label, LabelsResponse, JiraField types
- jira-cli/src/clients/jira.ts - Added listLabels, listFields methods
- jira-cli/src/commands/issue.ts - Added add-label, remove-label subcommands
- jira-cli/src/index.ts - Registered label and field commands
Commands implemented:
- jc label list [-l limit] [-p page] - List all labels in instance
- jc field list [--custom|--system] [--searchable] - List fields with filters
- jc issue add-label <key> <label> - Add label to issue
- jc issue remove-label <key> <label> - Remove label from issue
API coverage:
- GET /label - list labels (paginated)
- GET /field - list all fields
- PUT /issue/{key} with labels field - add/remove labels
Note for next person: Phase 7 continues with filters (jc filter list/get/create). Worklogs/attachments/watchers are P2. Async task polling still low priority. Consider README once core features done.
## 2026-01-19 - Phase 7 Partial (Filters)
Implemented `jc filter` commands for saved filter management.
Files created:
- jira-cli/src/commands/filter.ts - Filter commands (list, get, create, update, delete)
Files modified:
- jira-cli/src/types/jira.ts - Added Filter, FilterOwner, FilterSharePermission, FilterSearchResult, CreateFilterRequest, UpdateFilterRequest types
- jira-cli/src/clients/jira.ts - Added searchFilters, getFilter, createFilter, updateFilter, deleteFilter methods
- jira-cli/src/index.ts - Registered filter command
Commands implemented:
- jc filter list [-n name] [--owner] [--project] [--favourites] [--order-by]
- jc filter get <id> [--expand sharedUsers,subscriptions]
- jc filter create --name <name> --jql <jql> [--description] [--favourite]
- jc filter update <id> [--name] [--jql] [--description] [--favourite|--no-favourite]
- jc filter delete <id>
API coverage:
- GET /filter/search - search filters
- GET /filter/favourite - list favourite filters
- GET /filter/{id} - get filter
- POST /filter - create filter
- PUT /filter/{id} - update filter
- DELETE /filter/{id} - delete filter
Note for next person: Phase 7 core complete. Remaining: worklogs/attachments/watchers (P2), error handling/retry, README. Async task polling (Phase 5) still outstanding but low priority. Consider shipping v1.0 and documenting what's done.
## 2026-01-19 - Phase 7 Partial (Worklogs)
Implemented `jc issue worklogs/worklog` commands for time tracking.
Files modified:
- jira-cli/src/types/jira.ts - Added Worklog, WorklogsResponse, CreateWorklogRequest, UpdateWorklogRequest types
- jira-cli/src/clients/jira.ts - Added getWorklogs, getWorklog, addWorklog, updateWorklog, deleteWorklog methods
- jira-cli/src/commands/issue.ts - Added worklogs, worklog, worklog-edit, worklog-delete subcommands
Commands implemented:
- jc issue worklogs <key> [-l limit] - List worklogs on issue
- jc issue worklog <key> -t <time> [-c comment] [-s started] - Add worklog
- jc issue worklog-edit <key> <worklogId> [-t time] [-c comment] [-s started] - Update worklog
- jc issue worklog-delete <key> <worklogId> - Delete worklog
API coverage:
- GET /issue/{key}/worklog - list worklogs
- GET /issue/{key}/worklog/{id} - get worklog
- POST /issue/{key}/worklog - add worklog
- PUT /issue/{key}/worklog/{id} - update worklog
- DELETE /issue/{key}/worklog/{id} - delete worklog
Note for next person: Remaining Phase 7: attachments, watchers. Then error handling/retry, README. Phase 5 async task polling still low priority. Attachments probably next highest value (allow uploading files to issues).
## 2026-01-19 - Phase 7 Partial (Attachments)
Implemented `jc issue attachments/attach/attachment-delete` commands for file attachments.
Files modified:
- jira-cli/src/types/jira.ts - Added Attachment type
- jira-cli/src/clients/jira.ts - Added getAttachments, addAttachment, deleteAttachment methods; added form-data import
- jira-cli/src/commands/issue.ts - Added attachments, attach, attachment-delete subcommands
- jira-cli/package.json - Added form-data dependency
Commands implemented:
- jc issue attachments <key> - List attachments on issue
- jc issue attach <key> <file> - Upload file to issue
- jc issue attachment-delete <attachmentId> - Delete attachment by ID
API coverage:
- GET /issue/{key} with attachment field - list attachments
- POST /issue/{key}/attachments - upload file (multipart/form-data with X-Atlassian-Token: no-check)
- DELETE /attachment/{id} - delete attachment
Note for next person: Remaining Phase 7: watchers. Then error handling/retry, README. Phase 5 async task polling still low priority. Watchers lower value than attachments but straightforward to add. Could also consider shipping v1.0 documentation at this point.
## 2026-01-19 - Phase 7 Complete (Watchers)
Implemented `jc issue watchers/watch/unwatch` commands for issue watching.
Files modified:
- jira-cli/src/types/jira.ts - Added Watchers type
- jira-cli/src/clients/jira.ts - Added getWatchers, addWatcher, removeWatcher, getCurrentUser methods
- jira-cli/src/commands/issue.ts - Added watchers, watch, unwatch subcommands
Commands implemented:
- jc issue watchers <key> - List watchers on issue
- jc issue watch <key> [--user <accountId>] - Watch issue (self by default)
- jc issue unwatch <key> [--user <accountId>] - Unwatch issue (self by default)
API coverage:
- GET /issue/{key}/watchers - list watchers
- POST /issue/{key}/watchers - add watcher
- DELETE /issue/{key}/watchers?accountId= - remove watcher
- GET /myself - get current user (for self-watch)
Note for next person: Phase 7 feature work complete. Remaining: error handling/retry, README. Phase 5 async task polling + jc issue archive still deferred. Consider writing README with all command docs, or adding exponential backoff retry to JiraClient.
## 2026-01-19 - README Documentation
Created comprehensive README.md for jira-cli with full command reference.
Files created:
- jira-cli/README.md - Full documentation with all commands, options, examples
Documentation covers:
- Installation (bun install + build)
- Authentication (env vars + config file)
- Global options (--format, --output, --domain, --profile, --debug)
- All issue commands (CRUD, comments, links, labels, worklogs, attachments, watchers)
- Search commands (query, count)
- Project commands (list, get, statuses, components, versions)
- Filter commands (list, get, create, update, delete)
- Agile commands (boards, sprints, epics)
- Confluence commands (spaces, pages)
- Config commands
- Output format examples
- "Not Implemented" section documenting gaps
Note for next person: README done. Remaining work: error handling/retry (exponential backoff in JiraClient), async task polling (Phase 5). Consider shipping v1.0 at this point - all features documented and working.
## 2026-01-19 - Error Handling with Retry
Added exponential backoff retry to all API clients.
Files created:
- jira-cli/src/utils/retry.ts - Reusable retry interceptor for axios
Files modified:
- jira-cli/src/clients/jira.ts - Added retry interceptor
- jira-cli/src/clients/jira-agile.ts - Added retry interceptor
- jira-cli/src/clients/confluence.ts - Added retry interceptor
Retry behavior:
- Max 3 retries by default
- Exponential backoff: 1s → 2s → 4s (with jitter)
- Max delay capped at 30s
- Retries on: 429 (rate limit), 500, 502, 503, 504 (server errors)
- Retries network errors: ECONNRESET, ETIMEDOUT, ENOTFOUND, ECONNREFUSED, EPIPE
- Respects Retry-After header when present (common for 429)
- Configurable via RetryConfig interface
Note for next person: Phase 7 complete. Remaining: Phase 5 async task polling + jc issue archive (low priority). marklassian ADF conversion still deferred. CLI is production-ready at this point.
## 2026-01-19 - Phase 5 Complete (Async Tasks & Archive)
Implemented async task polling and issue archival.
Files created:
- jira-cli/src/utils/polling.ts - pollTask utility with configurable interval/timeout/progress callback
- jira-cli/src/commands/task.ts - Task commands
Files modified:
- jira-cli/src/types/jira.ts - Added TaskStatus, TaskProgress, TaskResult, ArchiveIssuesRequest/Response types
- jira-cli/src/clients/jira.ts - Added getTask, cancelTask, archiveIssues, archiveIssuesByJql methods
- jira-cli/src/commands/issue.ts - Added archive subcommand
- jira-cli/src/index.ts - Registered task command
Commands implemented:
- jc task get <taskId> - Get async task status
- jc task cancel <taskId> - Cancel running task
- jc issue archive --jql <query> [--wait] - Archive issues by JQL
- jc issue archive --issues KEY-1,KEY-2 [--wait] - Archive specific issues
API coverage:
- GET /task/{id} - get task status
- POST /task/{id}/cancel - cancel task
- POST /issue/archive - archive issues (returns taskId)
Polling behavior:
- 2s poll interval by default
- 5 minute timeout
- Optional onProgress callback
- Stops on terminal states: COMPLETE, FAILED, CANCELLED, DEAD
Note for next person: All PLAN.md phases complete! Remaining:
- marklassian ADF conversion (Phase 2 - deferred, raw ADF works)
- Velocity/burndown reports (Phase 4 - P2, deferred)
CLI is feature-complete for v1.0.