refactor: TUI shared row renderers, one bounty sum #147

Merged
nalum merged 2 commits from refactor/tui-shared-rows into main 2026-08-18 16:43:43 +00:00
Owner

Closes #131, #126. PR 9 of the #137 stack, based on #146. Two commits:

  1. rows.go — the TUI's first shared row layer: itemLine(item, opts), eventLine, the hoisted rewardLine, memberLabel, the one worthOf and a listBlock scaffold for the hand-copied ↑/↓ overflow blocks. This closes both #126 defects at the source: worthOf sums every unclaimed linked POINTS reward (the server auto-claims them all — jobs.go's take-only-the-first understated bounties, so the same job showed two point values on two tabs), and Today's Rewards-ready section now speaks the Rewards tab's own type and value words instead of leaking raw enum tails (PRIVILEGE, and currency without its €). familyRoleFromName folds into roleFromName.
  2. Adoption — today.go, jobs.go, lists.go and calendar.go render through the shared rows: the repeat glyph and bounty reach every board, Today's events gain the end range, repeat glyph, people marks and cancelled state the calendar always showed, the assign picker names members with their marks like every other picker, and four overflow windows collapse onto listBlock.

Verified live in a tmux-driven TUI session against the deployed cluster: Today's event rows show "18:00–19:00 dinner · ↻ · 1 ppl 🦔 · appointment", both Today and Jobs show the same "★ 34 pts" summed bounty, and Rewards-ready reads "points · 34 pts" through the shared vocabulary. make check green.

🤖 Generated with Claude Code

Closes #131, #126. PR 9 of the #137 stack, based on #146. Two commits: 1. **rows.go** — the TUI's first shared row layer: `itemLine(item, opts)`, `eventLine`, the hoisted `rewardLine`, `memberLabel`, the one `worthOf` and a `listBlock` scaffold for the hand-copied ↑/↓ overflow blocks. This closes both #126 defects at the source: `worthOf` sums every unclaimed linked POINTS reward (the server auto-claims them all — jobs.go's take-only-the-first understated bounties, so the same job showed two point values on two tabs), and Today's Rewards-ready section now speaks the Rewards tab's own type and value words instead of leaking raw enum tails (`PRIVILEGE`, and currency without its €). `familyRoleFromName` folds into `roleFromName`. 2. **Adoption** — today.go, jobs.go, lists.go and calendar.go render through the shared rows: the repeat glyph and bounty reach every board, Today's events gain the end range, repeat glyph, people marks and cancelled state the calendar always showed, the assign picker names members with their marks like every other picker, and four overflow windows collapse onto `listBlock`. Verified live in a tmux-driven TUI session against the deployed cluster: Today's event rows show "18:00–19:00 dinner · ↻ · 1 ppl 🦔 · appointment", both Today and Jobs show the same "★ 34 pts" summed bounty, and Rewards-ready reads "points · 34 pts" through the shared vocabulary. `make check` green. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The TUI had no shared row layer — today.go, jobs.go and lists.go each
re-drew the job row (the repeat glyph existed on exactly one), event
rows forked twice, and the two tabs disagreed on bounty math: today's
worthOf summed every unclaimed linked POINTS reward while jobs took
only the first, so the same job showed two point values (#131, #126).
rows.go now owns itemLine, eventLine, rewardLine, memberLabel and the
one worthOf (summing — the server auto-claims every linked reward);
today's Rewards-ready section stops leaking raw enum tails and speaks
through the same type and value words as the Rewards tab, currency
keeping its €. familyRoleFromName folds into roleFromName.
refactor(tui): the boards consume the shared rows
Some checks failed
check / commits (pull_request) Successful in 7s
check / web (pull_request) Successful in 1m31s
check / go (pull_request) Successful in 2m33s
check / report (pull_request) Successful in 5s
check / commits (push) Successful in 6s
check / report (push) Has been cancelled
check / web (push) Has been cancelled
tag / tag (push) Has been cancelled
check / go (push) Has been cancelled
e8aa66e1a6
today.go, jobs.go, lists.go and calendar.go now render their job and
event rows through rows.go — the repeat glyph and bounty reach every
board, Today's events gain the end range, the repeat glyph, the
people and the cancelled state the calendar always showed, and the
assign picker names members with their marks like every other picker.
The hand-copied ↑/↓ overflow blocks collapse onto listBlock.

Test report

Suite Tests Result Skipped
Unit 1370 ✅ pass 1
Integration 86 ✅ pass —

Coverage: 28.1%

Updated by the check workflow · commit e8aa66e1a6

<!-- ci-test-report --> ## Test report | Suite | Tests | Result | Skipped | | --- | --: | --- | --: | | Unit | 1370 | ✅ pass | 1 | | Integration | 86 | ✅ pass | — | **Coverage:** 28.1% <sub>Updated by the check workflow · commit e8aa66e1a684d490ffbf1436e0dc1354046133ab</sub>
nalum changed target branch from refactor/android-shared-components to main 2026-08-18 16:43:36 +00:00
nalum merged commit e8aa66e1a6 into main 2026-08-18 16:43:43 +00:00
nalum deleted branch refactor/tui-shared-rows 2026-08-18 16:43:43 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
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
eagraiclainne/app!147
No description provided.