Skip to content

feat(webui): /work board + detail templates (#1594)#1597

Merged
nextlevelshit merged 1 commit into
mainfrom
1594-work-board
Apr 30, 2026
Merged

feat(webui): /work board + detail templates (#1594)#1597
nextlevelshit merged 1 commit into
mainfrom
1594-work-board

Conversation

@nextlevelshit
Copy link
Copy Markdown
Collaborator

Summary

  • Add GET /work board listing bindings with status + recent matches
  • Add GET /work/{forge}/{owner}/{repo}/{number} detail view showing matched bindings + run history
  • Wire worksource.Service.ListBindings + MatchBindings into webui
  • Tailwind CDN templates, no emojis (Wave constraint)
  • Round-trip handler tests (htmltest pattern)

Related to #1594

Changes

  • internal/webui/handlers_work.go — board + detail handlers
  • internal/webui/handlers_work_test.go — round-trip tests for both routes
  • internal/webui/templates/work/{board,detail}.html — Tailwind templates
  • internal/webui/routes.go, server.go, embed.go — wire routes + embed templates
  • specs/1594-work-board/{spec,plan,tasks}.md — planning artifacts

Test Plan

  • go test ./internal/webui/... — handler round-trip tests pass
  • Manual: visit /work and /work/<forge>/<owner>/<repo>/<n> in dev server

Add unified /work board listing all worksource bindings + a
/work/{forge}/{owner}/{repo}/{number} detail view backed by the
worksource.Service from #1591. Two self-contained Tailwind CDN
templates render board + detail without extending layout.html so
utility classes don't collide with the project stylesheet.

- internal/webui/handlers_work.go: handleWorkBoard +
  handleWorkItemDetail; flat WorkBindingRow / WorkItemDetailData
  view-models; best-effort forge fetch with 3s timeout; recent-run
  history filtered by matched-pipeline name (placeholder until
  work_item_ref linkage in #2.4)
- internal/webui/templates/work/{board,detail}.html: Tailwind CDN
  pages with SVG icons, no emojis; empty/no-match states; disabled
  "Run on this issue" button pointing at #2.4
- internal/webui/embed.go: standalonePageTemplates slice parsed
  without layout cloning
- internal/webui/server.go: worksource.Service wired into
  serverRuntime via worksource.NewService(rwStore)
- internal/webui/routes.go: register both GET /work routes
- internal/webui/handlers_{test,work_test}.go: extend testTemplates
  with inline standalone stubs; round-trip tests for both handlers
  (Empty / WithBindings / NoMatch / OneMatch / BadNumber)
- specs/1594-work-board/: spec + plan + tasks

Refs #1594, depends on #1591 (MERGED) and #1590 (MERGED).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant