fix(board): CI pill stuck on running after Forgejo workflow finishes #622
No reviewers
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks!622
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "dev/615"
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?
Forgejo ≥ v15 pre-folds the terminal outcome into
status("success","failure", etc.) and setsconclusion: null. The adapter only knew the classicstatus: "completed" + conclusionshape, so these runs fell to"unknown"and were treated as still-pending by bothfoldCiStateandfoldWorkflowRuns— causing the board pill to stick on 🔄 CI running indefinitely.Add a pass-through branch in
toForgeWorkflowRunfor pre-folded statuses. Add explanatory comments to theunknown → pendingfallback in both view folders. Add adapter regression tests for all four pre-folded statuses and board/pipeline integration tests confirming the fold producessuccessend-to-end.Test plan
forgejo-adapter.test.ts: 4 new tests —status: "success|failure|cancelled|skipped" + conclusion: nulleach map to the correctForgeWorkflowRun.status.pipeline.test.ts: new test — pre-foldedsuccessshape flows throughfoldWorkflowRunstoci.state = "success".board.test.ts: new test —listWorkflowRunsreturningstatus: "success"producescard.pr.ci === "success"(not"pending").bun test— 112 tests, 0 failures.Closes #615
Forgejo ≥ v15 emits workflow runs with `status` already folded to the terminal outcome ("success", "failure", etc.) and `conclusion: null`. The adapter only recognised the classic `status: "completed"` + conclusion shape, so these runs fell through to "unknown" and were treated as still pending by both foldCiState and foldWorkflowRuns. Add a second branch in `toForgeWorkflowRun` that passes the pre-folded statuses through verbatim. Add inline comments to the "unknown → pending" fallback in both folders explaining the conservative intent so it isn't accidentally inverted. Add adapter regression tests for all four pre-folded statuses, plus board and pipeline integration tests confirming the fold produces `success` end-to-end. Closes #61580ca211088ff09e81627Correct fix, right scope, full test coverage, CI green.
All four AC branches verified: pre-folded statuses pass through in
toForgeWorkflowRun;completed+conclusionandqueued/in_progress/waitingpaths unchanged;unknownstill conservatively maps to pending with the new explanatory comments. GitHub adapter intentionally not touched (GitHub always emitscompleted+conclusion); GitLab adapter already maps statuses directly viatoPipelineStatus— no gap to fix there. Four adapter unit tests + pipeline and board integration tests cover the regression end-to-end.Correct fix, right scope, full test coverage, CI green.
All four AC branches verified: pre-folded statuses pass through in
toForgeWorkflowRun;completed+conclusionandqueued/in_progress/waitingpaths unchanged;unknownstill conservatively maps to pending with the new explanatory comments. GitHub adapter intentionally not touched (GitHub always emitscompleted+conclusion); GitLab adapter already maps statuses directly viatoPipelineStatus— no gap to fix there. Four adapter unit tests + pipeline and board integration tests cover the regression end-to-end.