IW-671: Split the Forgejo issue timeline read out of ForgejoClient #731
Closed
claude
wants to merge 22 commits from
IW-671 into main
pull from: IW-671
merge into: iterative-works:main
iterative-works:main
iterative-works:IW-75
iterative-works:IW-80
iterative-works:IW-111
iterative-works:IW-122
iterative-works:IW-152
iterative-works:IW-189
iterative-works:IW-197
iterative-works:IW-227
iterative-works:IW-339
iterative-works:IW-350
iterative-works:IW-353
iterative-works:IW-398
iterative-works:IW-425
iterative-works:IW-429
iterative-works:IW-430
iterative-works:IW-438
iterative-works:IW-440
iterative-works:IW-441
iterative-works:IW-442
iterative-works:IW-443
iterative-works:IW-452
iterative-works:IW-455
iterative-works:IW-456
iterative-works:IW-468
iterative-works:IW-469
iterative-works:IW-477
iterative-works:IW-492
iterative-works:IW-494
iterative-works:IW-543
iterative-works:IW-565
iterative-works:IW-568
iterative-works:IW-569
iterative-works:IW-570
iterative-works:IW-572
iterative-works:IW-577
iterative-works:IW-579
iterative-works:IW-584
iterative-works:IW-585
iterative-works:IW-586
iterative-works:IW-598
iterative-works:IW-783
iterative-works:IW-773
iterative-works:IW-770
iterative-works:IW-642
iterative-works:IW-643
iterative-works:IW-644
iterative-works:IW-649
iterative-works:IW-654
iterative-works:IW-661
iterative-works:IW-662
iterative-works:IW-666
iterative-works:IW-667
iterative-works:IW-754
iterative-works:IW-741
iterative-works:IW-740
iterative-works:IW-733
iterative-works:IW-724
iterative-works:IW-719
iterative-works:IW-755
iterative-works:IW-700
iterative-works:IW-756
iterative-works:IW-759
iterative-works:IW-795
iterative-works:IW-699
iterative-works:IW-552
iterative-works:IW-796
iterative-works:IW-797
iterative-works:IW-750
iterative-works:IW-681
iterative-works:IW-762
iterative-works:IW-790
iterative-works:IW-557
iterative-works:IW-548
iterative-works:IW-706
iterative-works:IW-513
iterative-works:IW-551
iterative-works:IW-707
iterative-works:IW-712
iterative-works:IW-708
iterative-works:IW-701
iterative-works:IW-690
iterative-works:IW-687
iterative-works:IW-682
iterative-works:IW-679
iterative-works:IW-749
iterative-works:IW-672
iterative-works:IW-744
iterative-works:IW-745
iterative-works:IW-678
iterative-works:IW-670
iterative-works:IW-734
iterative-works:IW-730
iterative-works:IW-610
iterative-works:IW-612
iterative-works:IW-607
iterative-works:IW-718
iterative-works:IW-718-phase-01
iterative-works:IW-715
iterative-works:IW-710
iterative-works:IW-702
iterative-works:IW-608
iterative-works:IW-675
iterative-works:IW-676
iterative-works:IW-677
iterative-works:IW-691
iterative-works:IW-599
iterative-works:IW-652
iterative-works:IW-651
iterative-works:IW-650
iterative-works:IW-656
iterative-works:IW-636
iterative-works:IW-631
iterative-works:IW-613
iterative-works:IW-637
iterative-works:IW-628
iterative-works:IW-629
iterative-works:IW-622
iterative-works:IW-623
iterative-works:IW-620
iterative-works:IW-616
iterative-works:IW-606
iterative-works:IW-601
iterative-works:IW-581
iterative-works:IW-491
iterative-works:IW-583
iterative-works:IW-578
iterative-works:IW-555
iterative-works:dashboard-control-plane
iterative-works:IW-556
iterative-works:IW-566
iterative-works:IW-544
iterative-works:IW-558
iterative-works:IW-517
iterative-works:chore/bump-version-0.15.0
iterative-works:chore/bump-version-0.14.0
iterative-works:IW-463
iterative-works:merge-url-after-a-separator
iterative-works:IW-497
iterative-works:IW-512
iterative-works:IW-526
iterative-works:dashboard-layer-dependencies
iterative-works:chore/bump-version-0.13.0
iterative-works:docs/skills-0.13.0
iterative-works:chore/bump-version-0.12.0
iterative-works:docs/api-0.12.0
iterative-works:phase-gate-followups
iterative-works:chore/bump-version-0.11.0
iterative-works:chore/regenerate-skills-0.11.0
iterative-works:batch-implement-blockers
iterative-works:IW-476
iterative-works:IW-436
iterative-works:IW-437
iterative-works:IW-422
iterative-works:IW-399
iterative-works:docs/forgejo-fj-cli-guidance
iterative-works:fix/forgejo-commit-status-field
iterative-works:wip/dashboard-control-plane-effort
iterative-works:feat/sbt-server-cleanup
iterative-works:IW-389
iterative-works:IW-382
iterative-works:IW-382-phase-02
iterative-works:IW-382-phase-01
iterative-works:wip/decide-outcome-ci-statuses
iterative-works:IW-347
iterative-works:chore/bump-version-0.6.1
iterative-works:IW-347-phase-02
iterative-works:fix-ssh-url-parsing
iterative-works:IW-347-phase-01
iterative-works:IW-346
iterative-works:IW-346-phase-02
iterative-works:IW-346-phase-01
iterative-works:IW-345
iterative-works:IW-345-phase-04
iterative-works:IW-345-phase-03
iterative-works:IW-345-phase-02
iterative-works:IW-345-phase-01
iterative-works:IW-344
iterative-works:IW-344-phase-03
iterative-works:IW-344-phase-02
iterative-works:IW-344-phase-01
iterative-works:fix-bloop-daemon-leak
iterative-works:fix-start-team-identifier
iterative-works:IW-340
iterative-works:IW-340-phase-01
iterative-works:fix-release-script-after-IW-106
iterative-works:add-build-iw-cli-skills
iterative-works:session-setup-hooks
iterative-works:IW-331
iterative-works:IW-106
iterative-works:IW-323
iterative-works:IW-323-phase-04
iterative-works:IW-323-phase-02
iterative-works:IW-323-phase-01
iterative-works:release/0.3.7
iterative-works:fix/claude-sync-and-batch-flag
iterative-works:fix/batch-implement-resume
iterative-works:chore/bump-0.3.6
iterative-works:fix/gitlab-work-items-url
iterative-works:fix/glab-mr-list-state-flag
iterative-works:chore/bump-version-0.3.5
iterative-works:IW-309
iterative-works:IW-305
iterative-works:IW-305-phase-01
iterative-works:IW-292
iterative-works:IW-292-phase-03
iterative-works:IW-292-phase-01
iterative-works:IW-289
iterative-works:fix/glab-mr-create-flags
iterative-works:IW-289-phase-07
iterative-works:IW-289-phase-06
iterative-works:IW-289-phase-05
iterative-works:IW-289-phase-02
iterative-works:IW-289-phase-01
iterative-works:IW-275
iterative-works:IW-275-phase-03
iterative-works:IW-275-phase-02
iterative-works:IW-275-phase-01
iterative-works:fix/glab-phase-advance
iterative-works:IW-274
iterative-works:IW-274-phase-05
iterative-works:IW-274-phase-03
iterative-works:IW-274-phase-02
iterative-works:IW-274-phase-01
iterative-works:IW-188
iterative-works:IW-188-phase-06
iterative-works:IW-188-phase-05
iterative-works:IW-272
iterative-works:IW-202
iterative-works:IW-188-phase-04
iterative-works:IW-188-phase-03
iterative-works:IW-202-phase-04
iterative-works:IW-202-phase-03
iterative-works:IW-202-phase-02
iterative-works:IW-202-phase-01
iterative-works:chore/bump-version-0.3.4
iterative-works:fix/phase-commit-uncommitted-files
iterative-works:release-automation
iterative-works:feat/update-command
iterative-works:chore/bump-version-0.3.0
iterative-works:wip/status-server-query
iterative-works:fix/register-team-and-error-handling
iterative-works:IW-148
iterative-works:docs-update-iw222
iterative-works:IW-222
iterative-works:IW-222-phase-04
iterative-works:IW-222-phase-03
iterative-works:IW-222-phase-01
iterative-works:IW-205
iterative-works:IW-205-phase-03
iterative-works:IW-205-phase-02
iterative-works:fix/ci-test-timeout
iterative-works:IW-206
iterative-works:IW-206-phase-07
iterative-works:IW-206-phase-06
iterative-works:IW-206-phase-05
iterative-works:IW-206-phase-04
iterative-works:IW-206-phase-03
iterative-works:IW-203
iterative-works:fix/ci-and-scalafix
iterative-works:IW-196
iterative-works:IW-175
iterative-works:IW-100
iterative-works:IW-100-phase-01
iterative-works:IW-164
iterative-works:IW-126
iterative-works:IW-126-phase-01
iterative-works:IW-103
iterative-works:IW-82
iterative-works:IW-82-phase-05
iterative-works:IW-82-phase-01
iterative-works:IW-92
iterative-works:IW-79
iterative-works:fix/github-issue-id-prefix
iterative-works:IW-88
iterative-works:IW-92-phase-01
iterative-works:IW-88-phase-01
iterative-works:IW-90
iterative-works:IW-74
iterative-works:IW-107
iterative-works:IW-79-phase-05
iterative-works:IW-79-phase-01
iterative-works:IW-72
iterative-works:IW-63
iterative-works:IW-46
iterative-works:46
iterative-works:46-phase-06
iterative-works:46-phase-05
iterative-works:48
iterative-works:IWLE-132
iterative-works:IWLE-131
iterative-works:IWLE-131-phase-03
iterative-works:IWLE-131-phase-02
iterative-works:IWLE-100
iterative-works:IWLE-76-phase-02
No reviewers
Labels
Clear labels
agent-ready
bug
Something isn't working
contract
Run the tool-contract suite on this PR
documentation
Improvements or additions to documentation
duplicate
This issue or pull request already exists
enhancement
New feature or request
good first issue
Good for newcomers
help wanted
Extra attention is needed
invalid
This doesn't seem right
needs-human
needs-input
Intake asked the human a question on the issue; waiting for the answer
question
Further information is requested
wontfix
This will not be worked on
No labels
agent-ready
bug
contract
documentation
duplicate
enhancement
good first issue
help wanted
invalid
needs-human
needs-input
question
wontfix
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
iterative-works/iw-cli!731
Loading…
Reference in a new issue
No description provided.
Delete branch "IW-671"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
The issue timeline read moves out of
core/adapters/ForgejoClient.scalainto its own object,ForgejoIssueTimeline. The behavior does not change: the HTTP requests, the results and the error texts are the same.ForgejoIssueTimelinegets its one effect (the authenticated page GET) as a function parameter, so it names no sttp, token or backend.Changes
core/adapters/ForgejoIssueTimeline.scala(new): URL builder, page parser, event mapping, page limit, stop rule and the pagedread.core/adapters/ForgejoClient.scala: the moved code is removed (about 1212 lines remain);TextResponseis top level andprivate[adapters];fetchIssueStatecallsForgejoIssueTimeline.read. No forwarders.core/test/ForgejoIssueTimelineTest.scala(new): the moved pure tests, plus four directtimelineCompletetests (each checked by a mutation).test/contract/forgejo_api_contract.bats: the PURPOSE comment names both objects.dashboard/jvm/itest/src/ItestServer.scalaretries on another port when any cause of a startup failure is aBindException(Undertow wraps it). Three tests inItestServerItest.Testing
ForgejoClientTest126 +ForgejoIssueTimelineTest14 = 140 pass (baseline 136).ItestServerItestandClaudeSessionLinksItestpass.core.compilehas no warnings; lint passes; the pre-push hook (./iw ./test unit) passed on this branch.project-management/issues/IW-671/review-packet.md.For the reviewer
ForgejoClient.parseTimelinePage,TimelinePage,TimelinePageLimit,timelineCompleteandbuildIssueTimelineUrlare gone. In this repository only the tests used them.ForgejoClient.scalanext to the deletedbuildIssueTimelineUrl. At that conflict, keep both deletions.Release notes
Tato změna je čistě vnitřní úprava nástroje iw-cli. Pro uživatele se nic nemění: všechny příkazy, jejich výstupy i chybová hlášení zůstávají stejné jako dosud.
Úprava zjednodušuje tu část nástroje, která komunikuje s Forgejo a zjišťuje stav úkolů. Díky tomu půjde tuto oblast v budoucnu snáze udržovat a opravovat. Současně jsme odstranili občasné selhání interních automatických testů dashboardu, které se uživatele nedotýkalo.
Po aktualizaci není nutné nic nastavovat ani měnit.
🤖 Generated with Claude Code
Closes #671
Issue: IW-671 Phase: 1 - Extract ForgejoIssueTimeline + move its tests This commit marks the checkpoint for phase 1 context generation. Use wf-implement IW-671 to return to this point. 🤖 Generated with Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>Extract ForgejoIssueTimeline + move its tests Artifacts: - phase-01-tasks.md 🤖 Generated with Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>There are conflicts after merging other branches.
d9e76182fbImplement: rework for review 19
The rework phase merged into IW-671 through #747; this pull request carries it.
We have some conflicts again.
We have still conflicts
Closed without a merge, at Michal's decision. The branch is 318 commits behind main, and a merge of main conflicts in 14 files, among them ForgejoClient.scala, which the TrackerError change (#778) rewrote. To resolve that costs more than to do the split again on current main. A new issue takes the work again; the branch stays on the forge.
Pull request closed