feat(jtk): add issue history command#422
Conversation
FindingsMajor: live read-only validation is still unmet. Minor: command-level coverage does not exercise Nit: history README flag table omits Nit: OUTPUT_SPEC text omits |
|
Live read-only validation with the local build is now complete. Target: Validated commands:
Results: all commands returned successfully. Pagination was verified from |
FindingsMinor: PR body still records the old failed live-validation state. No code-level architectural findings after the follow-up. The prior non-live findings are addressed: command-level extended/fulltext behavior is covered, |
FindingsNo findings. The remaining PR-body validation issue is resolved. The current metadata now records successful configured-credential validation with the local build, including default output, |
|
Findings
|
monit-reviewer
left a comment
There was a problem hiding this comment.
Automated PR Review
Reviewed commit: f1ddf61
Summary
| Reviewer | Findings |
|---|---|
| documentation:docs-reviewer | 2 |
| harness-engineering:harness-self-documenting-code-reviewer | 3 |
documentation:docs-reviewer (2 findings)
💡 Suggestion - tools/jtk/CHANGELOG.md:20
New entry links to the GitHub issue (#420 via issues/420) while all other CHANGELOG entries consistently link to pull requests (pull/327, pull/189). GitHub auto-redirects so the link works, but the inconsistency may confuse readers tracing history.
💡 Suggestion - tools/jtk/internal/cmd/OUTPUT_SPEC.md:316
--id output mode is described in prose but has no rendered example block, unlike the default and --extended modes which both have examples. Readers cannot verify what --id output actually looks like from the spec alone.
harness-engineering:harness-self-documenting-code-reviewer (3 findings)
💡 Suggestion - tools/jtk/internal/cmd/issues/history.go:106
issueHistoryPaginationis a noun phrase that does not surface the return contract(bool, string)→(hasMore, nextToken). A verb-led name such ascomputeHistoryPageCursorornextHistoryPageTokenwould let a reader understand what the function produces without scanning the body or call site.
tools/jtk/internal/cmd/issues/history.go:111
The guard
if advance == 0 && page.MaxResults > 0 { advance = page.MaxResults }handles a non-obvious Jira API edge case — an empty page mid-set — with no indication of why removing it would reintroduce a pagination loop. A short why-comment (e.g.,// guard: avoid re-emitting the current offset when the API returns an empty page mid-set) is warranted here per the project standard of commenting non-obvious invariants.
💡 Suggestion - tools/jtk/internal/present/issue_history.go:154
s = strings.Join(strings.Fields(s), " ")is non-obvious without context: Jira changelog values can embed newlines and tab characters that would corrupt tab-separated table output. A short inline comment such as// collapse embedded newlines/tabs from Jira valuesexplains the constraint to a future reader.
5 PR discussion threads considered.
Completed in 4m 05s | $2.40 | sonnet | daemon 0.2.127+dev.1.2b1249f | Glorfindel
| Field | Value |
|---|---|
| Model | sonnet |
| Reviewers | hybrid-synthesis, documentation:docs-reviewer, harness-engineering:harness-architecture-reviewer, harness-engineering:harness-enforcement-reviewer, harness-engineering:harness-knowledge-reviewer, harness-engineering:harness-self-documenting-code-reviewer, security:security-code-auditor |
| Engine | claude · sonnet |
| Reviewed by | pr-review-daemon · monit-pr-reviewer |
| Duration | 4m 05s wall · 4m 02s compute (Reviewers: 2m 58s · Synthesis: 1m 04s) |
| Cost | $2.40 (estimated) |
| Tokens | 403.5k in / 23.7k out |
| Turns | 14 |
Per-workstream usage
| Workstream | Model | In | Out | Cache read | Cache create | Cost |
|---|---|---|---|---|---|---|
| hybrid-synthesis | sonnet | 39.8k | 2.9k | 13.1k | 26.6k (1h) | $0.21 |
| documentation:docs-reviewer | sonnet | 39.0k | 2.7k | 10.6k | 28.4k (1h) | $0.21 |
| harness-engineering:harness-architecture-reviewer | sonnet | 63.6k | 954 | 0 | 63.6k (1h) | $0.40 |
| harness-engineering:harness-enforcement-reviewer | sonnet | 65.2k | 2.1k | 10.6k | 54.6k (1h) | $0.36 |
| harness-engineering:harness-knowledge-reviewer | sonnet | 64.4k | 1.5k | 10.6k | 53.8k (1h) | $0.35 |
| harness-engineering:harness-self-documenting-code-reviewer | sonnet | 71.8k | 12.3k | 10.6k | 61.3k (1h) | $0.56 |
| security:security-code-auditor | sonnet | 59.8k | 1.2k | 10.6k | 49.2k (1h) | $0.32 |
Re-reviews only run when @monit-reviewer is re-requested as a reviewer — push as many commits as you need, then re-request when ready. PRs targeting branches other than main, master are skipped, even when @monit-reviewer is re-requested.
monit-reviewer
left a comment
There was a problem hiding this comment.
Automated PR Review
Reviewed commit: 09e3cc3 | Previous: f1ddf61 (incremental)
Summary
No issues found.
10 PR discussion threads considered.
Completed in 1m 09s | $6.05 | sonnet | daemon 0.2.127+dev.1.2b1249f | Glorfindel
| Field | Value |
|---|---|
| Model | sonnet |
| Mode | Re-review · Cycle 2 · Session resumed |
| Reviewers | hybrid-synthesis, documentation:docs-reviewer, harness-engineering:harness-architecture-reviewer, harness-engineering:harness-enforcement-reviewer, harness-engineering:harness-knowledge-reviewer, harness-engineering:harness-self-documenting-code-reviewer, security:security-code-auditor |
| Engine | claude · sonnet |
| Reviewed by | pr-review-daemon · monit-pr-reviewer |
| Duration | 1m 09s wall · 44s compute (Reviewers: 28s · Synthesis: 16s) |
| Cost | $6.05 (estimated) |
| Tokens | 1063.2k in / 26.1k out |
| Turns | 28 |
Per-workstream usage
| Workstream | Model | In | Out | Cache read | Cache create | Cost |
|---|---|---|---|---|---|---|
| hybrid-synthesis | sonnet | 90.5k | 3.4k | 26.3k | 64.2k (1h) | $0.44 |
| documentation:docs-reviewer | sonnet | 89.7k | 2.8k | 23.7k | 66.0k (1h) | $0.45 |
| harness-engineering:harness-architecture-reviewer | sonnet | 164.0k | 1.1k | 13.1k | 150.9k (1h) | $0.93 |
| harness-engineering:harness-enforcement-reviewer | sonnet | 168.7k | 2.3k | 23.7k | 145.0k (1h) | $0.91 |
| harness-engineering:harness-knowledge-reviewer | sonnet | 166.4k | 1.7k | 23.7k | 142.7k (1h) | $0.89 |
| harness-engineering:harness-self-documenting-code-reviewer | sonnet | 188.4k | 12.5k | 23.7k | 164.7k (1h) | $1.18 |
| security:security-code-auditor | sonnet | 152.4k | 1.4k | 23.7k | 128.6k (1h) | $0.80 |
| discussion-summarizer | — | 43.0k | 719 | 0 | 43.0k (1h) | $0.45 |
Re-reviews only run when @monit-reviewer is re-requested as a reviewer — push as many commits as you need, then re-request when ready. PRs targeting branches other than main, master are skipped, even when @monit-reviewer is re-requested.
FindingsNo findings. The daemon edits are consistent with the approved architecture: docs are clearer, |
Summary
jtk issues history <issue-key>.--id,--extended,--fields,--max, and--next-page-token.tools/jtk/version.txtto1.3.Verification
go test ./api ./internal/present ./internal/cmd/issuesmake checkLive Validation
make build.bin/jtk --non-interactive me.bin/jtk --non-interactive issues list --project MON --max 20 --id.bin/jtk --non-interactive issues history MON-4648 --max 5.bin/jtk --non-interactive issues history MON-4648 --id --max 5.bin/jtk --non-interactive issues history MON-4648 --extended --max 5.bin/jtk --non-interactive issues history MON-4648 --fields CREATED,FIELD,TO --max 5.bin/jtk --non-interactive issues history MON-4648 --max 1 --next-page-token 1; the first page returnednext: 1, and the second returnednext: 2.Closes #420